参数
主要是分为必选参数、默认参数、可选参数以及关键字可选参数
必选参数
就是普通的传参
def hanshu(canshu):
print(canshu)
默认参数
就是给可选参数传一个默认值;如果参数中有默认参数,那顺序一定是放在最后面的
#错误例子
def hanshu(a=1,b):
#正确例子
def hanshu(a,b=1):
可选参数
*args可选参数是在定义一个新的对象时,返回出来是一个元组(我理解的时候调用参数时hanshu(1,2,3)也是传入了一个参数)
def hanshu(*args):
print(args)
print(type(args))
hanshu(1,2,3)
#结果返回
(1,2,3)
<class tuple>
关键字可选参数
**kwargs关键字可选参数是在定义一个新的对象时,要传入一个字典,或者字典中的key:vlue;当在函数内部直接打印的话,需要在字典的形参名前加两个星号
def hanshu(**kwargs):
print(**kwargs)
print(type(kwargs))
hanshu("name":"zhangsan","age":1)
如果一个函数中是def hanshu(*args,**kwargs):
可选参数一定要在关键字可选参数前面;但是传参时不用分清楚顺序,python会自动识别
局部变量和全局变量
这两个是啥意思,就是字面意思
如果一个函数中的局部变量和全局变量的变量名是一样的,当调用函数时,会优先采用局部变量;可以理解为强龙压不过地头蛇
name='zhangsan'
def hanshu():
name='lisi'
return name
print(hanshu())
##结果
lisi
如果说想要在函数中引用全局变量需要加入global关键字
name='zhangsan'
def hanshu():
global name
return name
print(hanshu())
##结果
zhangsan
如果想要在函数中修改全局变量
name='zhangsan'
def hanshu():
global name
name = 'lisi'
print(hanshu())
print(name)
##结果
lisi
lisi
值传递和引用传递
python有值传递也有引用传递;对于不可变对象(字符串、元组、整数、浮点型等)是值传递;对于可变对象(字典、集合、列表等)是引用传递《直接赋值除外》
a = 1
b = a
b = 2
print(a)
print(b)
#结果
1
2
a = [1,2,3,4]
b = a
b = [1,2,3,4,5]
print(a)
print(b)
#结果
[1,2,3,4]
[1,2,3,4,5]
a = [1,2,3]
b = a
b.append(4)
print(a)
print(b)
#结果
[1, 2, 3, 4]
[1, 2, 3, 4]
a = 'abc'
b = a
c = b.upper()
#结果
abc
abc
ABC
匿名函数和递归函数
匿名函数
在python中lamda关键词修饰的只能有单个表达式的函数叫做匿名函数
直接冲基础代码剖析
hanshu = lambda x,y:x if x>y else y
result = hanshu(4,6)
print(result)
##结果
6
def hanshu(n):
return lambda a:a * n
ceshi1 = hanshu(1)
ceshi2 = hanshu(3)
print(ceshi1(1))
print(ceshi2(3))
##结果
1
9
递归函数
可以理解为递归。。比较有名的算法《斐波那契》就是本身调用本身