- 通过关键字def定义函数
- def name(args...):
- tdo somethoing
- 返回值-return
- return只能再函数体内使用,支持返回所有的数据类型
- 有返回值的函数可以直接赋值给一个变量
- return就代表函数的结束,后续的语句不会再执行
- return是对函数执行结果的返回,也支持赋值语句
- 不确定参数=可变参数传递
- def add(*args,**kwargs):
- ......
- *args代表:将无参数的值合并成元组
- **kwargs:将有参数与默认值的赋值语句合并成字典
- 列子:add(1,3,4,name='mark',age=22)
- 1,3,4对应*args,后面的对应**kwargs
- 顺序发生变化,一定要使用赋值语句的形式进行传参
- def add(a,b=2,*args,**kwargs)-必传参数,默认参数,可变元组参数,可变字典参数
def add(a,b,c=2):
print(a+b+c)
add(1,2)
add(1,2,3)
add(a=2,c=3,b=1)
def test_args(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))
test_args(3,5,8,name='likk',age=90,top =186)
def test_super(*args,**kwargs):
if len(args)>=1:
print(args[0])
if 'name' in kwargs:
print(kwargs['name'])
else:
print('没有对应的参数')
# print(args,len(args))
# print(kwargs,len(kwargs))
test_super(8,90,7,age=78,name='Nill',clas='B')
a = (3,5,9)
b = {'name':'python','age':65}
test_super(a,b) # b作为一个变量,添加到了args中
test_super(*a,**b) # 分别指定,正确接收
def add(a,b=1,*args):
print(a,b,args)
s = (3,4,5)
add(1,2,*s)
add(4,3,*s)
# add(a=4,b=3,*s)#会报错
def add(*args,a,b=2):
print(a,b,args)
add(a=4,b=3,*s)
def add(a,b=2,**kwargs):
print(a,b,kwargs)
k = {'name':'Mark','age':89}
add(2,3,**k)
add(b=6,a=3,**k)
输出:
5
6
6
(3, 5, 8) <class 'tuple'>
{'name': 'likk', 'age': 90, 'top': 186} <class 'dict'>
8
Nill
(3, 5, 9)
没有对应的参数
3
python
1 2 (3, 4, 5)
4 3 (3, 4, 5)
4 3 (3, 4, 5)
2 3 {'name': 'Mark', 'age': 89}
3 6 {'name': 'Mark', 'age': 89}
- 参数定义类型的方法
- def person(name:str,age:)int=33):
- 传参的时候不会对参数类型进行验证,只有真正在业务使用时,不符合业务规则,才会报错
def add(a:int,b:int=3):
print(a+b)
add(2,5)
add('hello','Nill')#正常打印
def test(a:int,b:int=1,*args:int,**kwargs:str):
print(a,b,args,kwargs)
test(3,4,5,'8','nill',name='mark')
输出:
7
helloNill
3 4 (5, '8', 'nill') {'name': 'mark'}
- 全局变量与局部变量
- 在python最上层的代码块的变量
- 全局变量可以在函数内被读取使用
global关键字,可以将全局变量在函数体内进行修改(工作中不建议修改全局变量)
name='Mark'
age = 32
def test():
print(name)
def test1():
name='Nill'
print('函数体内',name)
test1()
print('函数外',name)
def test2():
age=33
print(age)
test2()
def test3(a):
a=90
test3(name)
print(name)
def test4():
global name
global age
name=10
age = 19
print(name)
test4()
print(name)
print(age)
dd = {'n':10,'m':24}
def test5():
dd['c'] = 34
dd.pop('n')
test5()
print(dd)
输出:
函数体内 Nill
函数外 Mark
33
Mark
Mark
10
19
{'m': 24, 'c': 34}
递归函数
- 一个函数不停的将自己反复执行
- 使用递归时,一定要给予退出的方案,否则会导致内存溢出,电脑死机,避免滥用递归
count = 0
def test():
global count
count += 1
if count !=5:
print('count条件不满足,要重新执行,当前count是%s'% count)
return test()
else:
print('count is %s'% count)
test()
输出:
count条件不满足,要重新执行,当前count是1
count条件不满足,要重新执行,当前count是2
count条件不满足,要重新执行,当前count是3
count条件不满足,要重新执行,当前count是4
count is 5
### 匿名函数-lambda
- 定义一个轻量化的函数(简单业务),即用即删除,很适合需要完成一项功能,但此功能只在此一处使用
- f = lambda:value 无参数
- f()
- f = lambda x,y:x*y 有参数
- f(1,2)
f = lambda:3
result = f()
print(result)
f = lambda:print(7)
f()
f1 = lambda x,y=4:x*3+y*1
print(f1(3))
f2 = lambda x,y=4:x*3>y*1
print(f2(3))
us = [{'book':'python'},{'food':'milk'},{'name':'mark'}]
users = [{'name':'python'},{'name':'milk'},{'name':'mark'}]
users.sort(key=lambda x:x['name'])
print(users)
输出:
3
7
13
True
[{'name': 'mark'}, {'name': 'milk'}, {'name': 'python'}]
本文深入探讨了Python中的函数定义与使用,包括def关键字、参数类型如必填、默认、可变元组和字典,以及return语句。详细解释了全局与局部变量的区别,并展示了如何修改全局变量。此外,还介绍了递归函数的概念及注意事项,防止无限递归导致的问题。最后,简要提到了lambda表达式及其在函数式编程中的应用。

被折叠的 条评论
为什么被折叠?



