2.函数
1.创建函数‘
def
lambda’
2.函数参数
位置或关键字参数
任意数量的位置参数
? 任意数量的位置参数在定义的时候是需要一个星号前缀来表示,在传递
参数的时候,可以在原有参数的后面添加零个或多个参数,这些参数将
会被放在元组内并传入到函数。带星号前缀的参数必须定义在不带两个
星号的参数之后。如:
? def fun4(str1,*numbers):
? print fun4 , numbers
? >>>fun4(“numbers:”,1,2,3,4) #输出numbers: (1, 2, 3, 4)
? def fun4(*numbers,str1)这样定义参数列表是不允许的,因为同样有歧义
任意数量的关键字参数
? 任意数量的关键字参数在定义的时候,参数名称前面需要有两个星号(**)
作为前缀,这样定义出来的参数,在传递参数的时候,可以在原有的参
数后面添加任意零个或多个关键字参数,这些参数会被放到字典内并传
入到函数中。带两个星号前缀的参数必须定义在所有带默认值的参数之
后。
? def fun4(a=1,*numbers,**kwargs):
? print a,numbers,kwargs
? >>>fun4(4,2,3,4,b=2,c=3)
? #输出4 (2, 3, 4) {'c': 3, 'b': 2}
3.可变对象与不可变对象
不可变对象:数值类型,字符串,yang ,元组
可变对象 : 字典,列表
python函数的参数都是对象的 引用,如果在引用不可变对象,函数外被引用的对象则不会改变
如果希望赋值时可变对象不进行引用,而是重新分配地址空间并将数据复制,可以Python的copy模块。其中主要 函数有copy.copy和copy.deepcopy
? 1 copy.copy 仅仅复制父对象,不会复制父对象内部的子对象
? 2 copy.deepcopy 复制父对象和子对象
4.作用域
全局变量、局部变量
在局部作用域中,如果全局
变量与局部变量重名,那么全局变量会被局部变量屏蔽。如果想访问全
局变量,可以使用globals函数:
? def print_x():
? x = 2
? print globals()[‘x’]
? >>> x = 1
? >>>print_x()
? >>>1