![bf064793bdfd59bbf2485f3fd8429135.gif](https://i-blog.csdnimg.cn/blog_migrate/6910b63c3c2463c7936ed0d748c879b6.gif)
动动手指,点击关注
一、函数返回值
示例:
def test1(): print('in the test1')def test2(): print('in the test2') return 0def test3(): print('in the test3') return 1,'hello',['Jim','Lilei']x=test1()y=test2()z=test3()print(x)print(y)print(z)
运行结果:
in the test1in the test2in the test3None0(1, 'hello', ['Jim', 'Lilei'])[Finished in 0.2s]
总结:
- 当定义的返回值等于0的情况下,没有return的时候,返回值None。
- 当定义的返回值等于1的情况下,返回的是一个对象,Python中的所有数据类型都是一个对象。
- 当定义的返回值大于1时,返回的是一个元组tuple。
![79bcc80632616ccd4ba33d30b7dcc48f.png](https://i-blog.csdnimg.cn/blog_migrate/8184b286a57fd9774f11986e10b4ab27.jpeg)
返回值的作用:
- python函数中return的作用就是讲函数执行结果返回给调用程序,后边其他程序的逻辑需要根据这个返回值的结果来去进行不同的操作,需要这个结果;
- 所有函数都有返回值,如果没有 return 语句,会隐式地调用 return None 作为返回值;
- 一个函数可以存在多条 return 语句,但只有一条可以被执行,如果没有一条 reutrn 语句被执行,同样会隐式调用 return None 作为返回值;
- 如果有必要,可以显式调用 return None 明确返回一个None(空值对象)作为返回值,可以简写为 return,不过 python 中懒惰即美德,所以一般能不写就不写;
二、函数调用
- 形参:形式参数,是虚拟变量,在定义函数和函数体的时候使用形参,目的是在函数调用时接受实参(实参个数,类型应与实参一一对应)
- 实参:实际参数,调用函数时传给函数的参数,可以是常量、变量,表达式,函数,传给形参
- 区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参
示例1:
注:X、Y是形参。1、2是实参。
def test(x,y): print(x) print(y) test(1,2)
![168e0e03ff05f96f220e029d6432323a.png](https://i-blog.csdnimg.cn/blog_migrate/58617a9267bcb76f1da796b85b1516f0.jpeg)
形参
![4284ed0f8062619d6d66db3b95a88b4a.png](https://i-blog.csdnimg.cn/blog_migrate/577c2d411a1a78816508d15dca3976e3.jpeg)
实参
示例2:
注:位置参数和关键字参数(标准调用:实参与形参的位置需要一一对应;关键字参数的调用:位置无需固定,但是关键字参数不能放在位置参数的前面)
def test(x,y,z): print(x) print(y) print(z)test(y=2,x=1) #关键字参数调用与形参定义顺序无关test(1,2) #位置参数调用与形参一一对应test(x=2,3)#既有关键字调用,又有位置参数调用,按照位置参数执行test(2,y=3)这样就可以test(3,z=2,6)#关键参数不能写到位置参数的前面test(3,6,z=2)
三、默认参数
- 特点:调用函数的时候,默认参数可有可无,非必传递
- 用途:默认安装值
![699c3b3514eb836ecf61378135458235.png](https://i-blog.csdnimg.cn/blog_migrate/2845f27dc4380dfa735fc10062a38308.jpeg)
def test(x,y=2):print(x)print(y)test(1,3)def conn(host,port=3306): pass
四、参数组
定义:针对实参不固定的情况下,该如何定义形参?
以*开头定义一个变量名,可以接受多个实参,把这些实参放进一个元组内。
示例1:
def test(*args):print(args)test(1,2,3,5,4,23,12)test(*[1,2,3,4,5])def test1(x,*args): print(x) print(args)test1(1,2,3,4,5,6,7)注:其中的1赋值给x,剩余部分赋值给args参数组。
运行结果:
(1, 2, 3, 5, 4, 23, 12)(1, 2, 3, 4, 5)1(2, 3, 4, 5, 6, 7)[Finished in 0.2s]
示例2:与字典结合
def test2(**kwargs):print(kwargs)print(kwargs['name'])print(kwargs['age'])test2(name='Jim',age=8)
运行结果:
{'name': 'Jim', 'age': 8}Jim8
示例3:与位置参数结合
def test3(name,**kwargs): print(name) print(kwargs)test3('Jim',age=18,sex='m')
运行结果:
Jim{'age': 18, 'sex': 'm'}
示例4:位置参数和关键字参数
- *args接收N个位置参数,转换成元组的形式
- **kwargs接收的N个关键字参数,转换成字典的形式
def test4(name,age=18,*args,**kwargs): print(name) print(age) print(args) print(kwargs)
运行结果:
Jim34(){'sex': 'm', 'hobby': 'tesla'}注:所以在匹配到*args时运行的结果是空元组()。
![118d4baeded15d1ad48f5a2c50644963.png](https://i-blog.csdnimg.cn/blog_migrate/521f3a23a3921c20d74f7acd9cbf0e7c.jpeg)
结语:
感谢阅读,欢迎在评论区中发表自己不同的观点,若有其他问题请在评论区留言,喜欢的朋友请多多关注转发支持一下。
![c55a7f311b5cf1ae5bc99326f9ec857a.gif](https://i-blog.csdnimg.cn/blog_migrate/5c8d9706cb32b36520114fc4eabd2c99.gif)
点个赞呗!!!
- python-函数与函数式编程
- python-字符编码转换