函数
1.面向对象--》类
2.面向过程--》过程--》def
3.函数式编程--》def
#函数
def func1():
'''this is a function'''
print('in the func1')
return 0
#过程(没有return)
def func2():
'''this is a process'''
print('in the func2')
x=func1()
y=func2()
print('the value of x is %s'%x)
print('the value of y is %s'%y)
结果:
in the func1
in the func2
the value of x is 0
the value of y is None
def test(x,y,z):
print(x)
print(y)
print(z)
test(3,4,1) #位置参数:与形参顺序一一对应
test(y=5,z=7,x=2) #关键自参数:与形参顺序无关
test(3,z=5,y=7) #位置参数一定要写在关键字参数的前面
test(4,5,z=8)
#默认参数特点:函数调用时,默认参数可传可不传
#作用:默认安装
def conn(host,port=3306):
pass
#接收的参数个数不固定
#*args:接收n个位置参数,转成一个tuple输出
def test(*args):
print(args)
test(1,2,3,4,5,6)
test(*[1,2,3,4,5,6])
test('Alex')
(1, 2, 3, 4, 5, 6)
(1, 2, 3, 4, 5, 6)
('Alex',)
#一个固定参数,其余参数不固定
def test1(x,*args):
print(x)
print(args)
test1(1,2,3,4,5,6,7)
1
(2, 3, 4, 5, 6, 7)
#kwargs:把n个关键字参数,转换成字典的方式
def test2(**kwargs):
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
print(kwargs['sex'])
test2(name='alex',age=23,sex='F')
test2(**{'name':'alex','age':23,'sex':'f'})
{'name': 'alex', 'age': 23, 'sex': 'F'}
alex
23
F
def test3(name,**kwargs):
print(name)
print(kwargs)
test3('alex')
alex
{}
def test4(name,age=23,*args,**kwargs):
print(name)
print(age)
print(args) #args:位置参数
print(kwargs) #kwargs:关键字参数
test4('alex',3,23,36,sex='m',hobby='shopping')
alex
3
(23, 36)
{'sex': 'm', 'hobby': 'shopping'}
school='bupt' #全局变量
def change_name(name):
school='cnn of bupt' #局部变量
print("before change:",name,school)
name='Alex' #局部变量
print("after change:",name)
name='alex'
change_name(name)
print(name)
print('school:',school)
before change: alex cnn of bupt
after change: Alex
alex
school: bupt
局部变量不能使全局变量的值发生改变的情况:1.字符串 2.单独的整数
而定义为全局变量的列表和字典,可以通过局部变量更改它们的值。
name=['alex','xuhang','mengmeng']
def change_name(name):
name[0]='ALEX'
print('in the function',name)
change_name(name)
print(name)
in the function ['ALEX', 'xuhang', 'mengmeng']
['ALEX', 'xuhang', 'mengmeng']