您的位置:首页 > 编程语言 > Python开发

python函数基础

2017-08-08 19:13 169 查看

使用函数的意义

  首先必须要认识到的是函数在python使用过程中是十分重要的,对于我们经常写代码时发生的多次重复的某些代码,我们时常会使用函数来解决诸如此类问题。

  这是因为函数在解决代码重用方面具有很大的优势,并且这些定义好的函数在面临修改代码时的操作也减轻了很大一部分的工作量,并且程序可读性也很好,所以函数有这样多的好处,我们来使用函数吧。

  怎样使用函数

  在函数使用过程一定要先定义在调用。

def func(arg1,arg2,):
'描述信息'
#函数体
return


定义函数

  (1)在Python中采用def关键字进行函数的定义,不用指定返回值的类型。

  (2)函数参数args可以是零个、一个或者多个,函数参数也不用指定参数类型,因为在Python中变量都是弱类型的,Python会自动根据值来维护其类型。

    根据args的个数可以将函数分为无参函数,有参函数和空函数。

  (3)return语句是可选的,它可以在函数体内任何位置出现;如果没有return语句,会自动返回NONE,如果有return语句,但是return后面没有接表达式或者值的话也是返回NONE,return一个值,则返回一个值,如果return多个值则返回一个元组。注:与yield不同的是,return执行到就结束不会返回后面的值了。

  在函数的定义阶段涉及到全局变量与局部变量。

x=10000#定义全局变量
def foo():
x=1#局部变量
print(x)
print(x)
foo()


  局部变量在调用函数时建立关系,结束时解除关系。

形参与实参

  形参是在定义函数的时候,括号里面的参数,而实参则是在调用函数的时候,括号里面的参数。可以理解为将实参的变量值赋给形参,与变量的赋值关系类似。当然只有有参函数才有形参与实参啦。

def foo(x):
x.append(4)
print(x)
x = [1, 2, 3]
foo(x)


  这里实参采用的是一个列表,并且在函数中改变了原来的列表l,这里的实验环境比较简单,如果在实际生产中也使用这样可变的实参,是不支持的,这往往导致一些难以排查出的故障。所以实参最好是不可变数据类型。

位置参数与默认参数

  根据位置参数传值:

def foo(x,y):
res=x+y
return res
print(foo(5,10))


  还可以通过给定默认参数进行赋值:

def foo(x,y):
res=x+y
return res
print(foo(x=5,y=10))


  或者两者混合使用:

def foo(x,y):
res=x+y
return res
print(foo(5,y=10))


  默认参数就是定义参数时,形参不传值默认使用的值。

def foo(x,y=10):
res=x+y
return res
print(foo(5))


动态参数

  参数前一个“*”:在函数中会把传的多出的参数转成一个元组。

def func (*args):
print(args)

func(123,1,2,'a')


  这里args是一个元组的形式包含了所有的元素。

  **kwargs则是以关键字形式,多余的关键字传给kwargs,结果为字典形式。

def func(x,**kwargs):
print(x)
print(kwargs)
func(1,y=2,a=3,b=4)

输出结果:
{'a': 3, 'b': 4, 'y': 2}


名称空间与作用域

  在定义变量名,函数名等的时候,其实是有一块地址空间存放的,所以调用使用时就可以从名称空间直接获取到。

  python中有三种名称空间,内置名称空间,全局名称空间,以及局部名称空间。

  其中全局名称空间与内置名称空间的作用域叫做全局作用域,局部名称空间作用范围叫做局部作用域。

  函数内部需要一个变量的时候,现在函数内部的局域名称空间去找,如果没有就回去全局名称空间去找,最后才会去内置名称空间去找。

函数的嵌套与闭包函数

  函数嵌套就是指函数内部调用其他的函数。

  例如一个比多个值大小的函数:

def my_max(x,y):
res=x if x>y else y
return res

def my_max4(a,b,c,d):
res1=my_max(a,b)
res2=my_max(c,d)
res3=my_max(res1,res2)
return res3
print(my_max4(3,8,12,6))


  这里把函数当做参数传递,并且在后一个函数调用了前一个函数完成需求,这就是嵌套函数的基本应用。

  这里要提一下,在Python中函数是可以作为对象操作的,比如被赋值,被当做参数传递等。

  闭包函数也是函数嵌套中的一种,他首先必须是内部定义的函数,对外部作用域而不是全局作用域名字的引用。

  闭包函数的基本形式:

x=1
def f1():
def f2():
print(x)
return f2
f2=f1()
f2()


  f1加括号执行,然后返回一个f2的地址值,f2就是闭包函数,运行f2打印其中的值。

  爬取python官网的代码:

from urllib.request import urlopen
def f1(url):
def f2():
print(urlopen(url).read())
return f2
python=f1('http://www.python.org')
python()


  闭包函数在python中的应用场景十分多,包括后面要提的装饰器,以及简单的爬去网页,都会用到闭包函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: