函数
定义函数
def 函数名():
代码
全局与局部变量
建议全局变量定义为 g_a=100
如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
a=100
def test():
global a=200 #修改全局变量的值的时候要在前面加上global
test()
对于可变类型的全局变量(列表,字典)来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。
返回值
函数返回多个值:本质上利用了元组
def test():
a=10
b=5
return a,b
c,d=test()
print(c,d)
缺省参数
带有默认值的参数要一定要放在参数列表的最后面
def test(a,b=22)#正确
def test(a,b=22,c=33)#正确
def test(a=22,b)#不正取
def test(a,b=22,c=33):
print(a b c)
test(11,55)#11 55 33
test(11,c=55)#11 22 55
test(c=44,b=33,a=22)#22 33 44
不定长参数
有时需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数
加了(*)号的变量args会存放所有未命名的变量参数,args为元组;而加了两个的kwargs会存放命名参数,即key=value形式,kwargs为字典
def fun(a, b, *args, **kwargs):
>>> def fun(a, b, *args, **kwargs):
... """可变参数演示示例"""
... print "a =", a
... print "b =", b
... print "args =", args
... print "kwargs: "
... for key, value in kwargs.items():
... print key, "=", value
...
>>> fun(1, 2, 3, 4, 5, m=6, n=7, p=8) # 注意传递的参数对应
a = 1
b = 2
args = (3, 4, 5)
kwargs:
p = 8
m = 6
n = 7
元组,字典的拆包:参数加一个*号表示元组,两个表示字典
c = (3, 4, 5)
d = {“m”:6, “n”:7, “p”:8}
fun(1, 2, *c, **d) # 注意元组与字典的传参方式
a = 1
b = 2
args = (3, 4, 5)
kwargs:
p = 8
m = 6
n = 7
不加的话:
fun(1, 2, c, d) # 注意不加星号与上面的区别
a = 1
b = 2
args = ((3, 4, 5), {‘p’: 8, ‘m’: 6, ‘n’: 7})
kwargs:
引用
id()可以看到变量所在的内存地址
In [2]: a=100
In [3]: id(a)
Out[3]: 10917536
In [4]: b=a
In [5]: id(b)
Out[5]: 10917536
不可变类型
python中不可改变的类型:元组,数组,字符串
可变类型:列表,字典
字典的key只要是不可变类型都可以,因为它是把key用hash算法转换为唯一的值去对应相应的value