函数
函数的定义和使用
定义:
def hello():
print('你好')
#调用函数
hello()
其中hello为函数名,可以在主程序中直接调用.
需要注意: 函数必须是先定义再使用
返回值 return
return是可选的,若没有,则函数返回空.
函数中一旦运行到return,则函数运行结束
定义一个求平方值的函数
#定义函数
def pfh(x,y):
print(f'{x}和{y}的平方和为{x**2 + y**2}')
return x**2 + y**2
#调用
a = pfh(3,4)
#a的值为25
函数的参数
固定的参数
1.参数没有默认值
def mysum(x,y):
return int(x) + int(y)
传入的变量与定义的参数必须是一一对应,否则会报错.
2.参数存在默认值
def mysum_1(x = 0,y = 0):
return int(x) + int(y)
在运行这个函数时,不带参数不会报错.
带不定个数的参数 *args
def ex(*args):
print(args)
ex(1)
ex(1,2)
ex(1,2,3)
结果为(1,)(1,2)(1,2,3)
传入的值在函数中以元组存放
依据此特性,可以传入不定个数的参数.
def musum_2(args*):
return sum([int(i) for i in args])
组合式写法
def mysum_3(x,*args):
return x + sum([int(i) for i in args])
这表示该函数至少传入一个参数,固定的参数必须写在前面
关键字参数 **kw
关键字参数的写法类似于 a = 1,b =2
def ex_1(x,*args,**kw):
print(x,args,kw)
ex_1(1,2,a = 1)
ex_1(1,2,3,4,a = 1,b = 2)
运行结束可得
1,(2,),{‘a’ : 1}
1,(2,3,4),{‘a’ : 1,‘b’ : 2}
命名关键字
*之后的为可选参数,不能传入* 后没有的参数,如示例中,若再传入xx=1,则程序报错.
def ex_2(x,*,id,yw = 60,sx = 60):
print(x,id,yw,sx)
ex_2 (1,id = '12001')
ex_2 (1,id = '12001',yw = 66)
ex_2 (1,id = '12001',yw = 66,sx = 77)
>>>
1 12001 60 60
1 12001 66 60
1 12001 66 77
变量作业范围
不变量:数值,字符串,元组
def change(x,y,z):
x = 777
y = 'asdf'
z = (4,5)
print('函数内:',x,y,z)
a = 666
b = 'abc'
c = (1,2)
change(a,b,c)
print('函数外:',a,b,c)
运行结果为:
函数内: 777 asdf (4, 5)
函数外: 666 abc (1, 2)
结论: 在不做全局变量时,数值,字符串,元组的值不能被函数改变.
变量:列表,字典,集合
a = [1,2]
b = {'12001':[66,77]}
c = {2,4,6}
def change2(x,y,z):
x.append(3)
y['12001'] = [88,99]
z.add(8)
print('函数内:',x,y,z)
change2(a,b,c)
print('函数外:',a,b,c)
函数内: [1, 2, 3] {‘12001’: [88, 99]} {8, 2, 4, 6}
函数外: [1, 2, 3] {‘12001’: [88, 99]} {8, 2, 4, 6}
故可得,在函数内改变列表,字典,集合,可直接作用于函数外.
全局变量和局部变量
先写一个小例子:
ga = 1
gb = 'a'
gc =[1,2,3]
def test1():
print(ga,gb)
gc.append(4)
print(gc)
test1()
print(gc)
def test2():
ga = 2
gb = 'b'
print(ga,gb)
gc =(1,2)
print(gc)
test()
print(ga,gb)
print(gc)
1 a
[1, 2, 3, 4]
[1, 2, 3, 4]
2 b
(1, 2)
1 a
[1, 2, 3, 4]
凡是在函数外定义的变量都是全局变量,可以直接在函数内调用.
凡是在函数内定义的变量叫局部变量,只在函数内有效.
注意 若同时定义了局部变量和全局变量,局部变量优先级高.
函数内修改全局变量需要声明 global
def test3():
global ga
ga = 999
test3()
print(ga)
999