python中的函数

1|0一. 函数的定义


1|11. 函数的定义:


1) 具备某一功能的代码段

2) 可以重复使用

1|22. 函数定义语法:


def 函数名称(): 函数体(实现功能的代码段) 注意:函数体的缩进

2|0二. 函数的调用


2|11. 没有参数:函数名称()


实例1:

#定义函数 def hello(): print("Hello World!") #调用无参函数 hello() 运行结果: Hello World!

2|22. 有参数:函数名称(参数值)


实例2:

#定义函数 def welcome(name): print("Welcome", name) #调用有参函数 welcome("student") 运行结果: Welcome student

3|0三. 函数的参数


3|11. 形参


形参:形式参数。定义函数时,使用形参,相当于占位符。目的是用来接收调用该函数时传递的参数,告诉使用者,需要提供的数据有哪些

3|22. 实参


实参:调用函数时,是传入的参数,必须是确定的值

4|0四. 函数的参数类型


4|11. 位置参数:按照形参顺序,放入实参


#定义函数 def print_info(name, age): print("名字: ", name) print("年龄: ", age) #调用print_info函数 print_info("Jack", 30) 运行结果: 名字: Jack 年龄: 30

4|22. 关键字参数(指定参数):不用按形参顺序放入实参,传参时要求:形参名称=实参值


#定义函数 def print_info(name, age): print("名字: ", name) print("年龄: ", age) #调用print_info函数 print_info(age=30, name="Jack") 运行结果: 名字: Jack 年龄: 30

4|33. 默认参数:在定义函数时,给形参一个默认值,需要放在形参的最后,当调用函数时,默认参数的值可传可不传,不传时,使用默认值


#定义函数 def print_info(name, age=28): print("名字: ", name) print("年龄: ", age) #调用print_info函数 print_info("Jack") print_info("Jack", 30) 运行结果: 名字: Jack 年龄: 28 名字: Jack 年龄: 30

必须注意:默认参数必须指向不可变对象:整数、字符串、元组

#定义一个默认参数指向可变对象列表的函数 def add_end(L=[]): L.append('END') print(L) #调用add_end函数 add_end() add_end() add_end() 运行结果: ['END'] ['END', 'END'] ['END', 'END', 'END']

这是因为python函数在定义的时候,默认参数L的值就被计算出来了,为[]。默认参数L是一个变量,它指向对象[],每次调用该函数时,如果改变了L的内容,下次再调用时,默认参数的内容就变了,不再是函数定义时的[]了

4|44. 可变参数(动态参数):在定义函数时,不限定参数的个数,可用*args和**kwargs表示


*args 为元组,比如print()函数的参数就是*args

**kwargs为字典,比如requests库的request()方法的参数就是**kwargs

*args将参数打包成tuple给函数体使用

#定义函数 def print_info(name, age, *args): print(name) print(age) print(args) for item in args: print(item) #调用print_info函数 print_info("Jack", 30, "male", "running") 运行结果: Jack 30 ('male', 'running') male running

**kwargs将参数打包成dict给函数体使用,调用时实参是key=value的形式

#定义函数 def print_info(name, age, **kwargs): print(name) print(age) print(kwargs) for key, value in kwargs.items(): print(key + ":" + value) #调用print_info函数 print_info("Jack", 30, sex="male", hobby="reading") 运行结果: Jack 30 {'hobby': 'reading', 'sex': 'male'} hobby:reading sex:male

4|55. 参数组合:当多种参数组合使用时,参数定义的顺序为:位置参数(关键字参数)、默认参数、可变参数


#定义函数 def print_info(name, age, sex="male", **kwargs): print("name:" + name) print("age:" + str(age)) print("sex:" + sex) for key, value in kwargs.items(): print(key + ":" + value) #调用print_info函数 print_info("Jack", 30, hobby="reading", city="shenzhen") print_info(sex="female", age=20, name="Lucy",hobby="reading", city="shenzhen") 运行结果: name:Jack age:30 sex:male hobby:reading city:shenzhen name:Lucy age:20 sex:female hobby:reading city:shenzhen

5|0五. 匿名函数


5|11. python使用lambda来创建匿名函数


所谓匿名,也就是没有函数名,不再使用def 函数名 这样标准的形式定义一个函数

5|22. lambda与标准函数的区别


1) lambda只是一个表达式,而不是一个语句

作为一个表达式,lambda可以返回一个函数,可以赋值给变量,而不像def那样在头部将函数赋值给变量名(函数名)

2) lambda的主体是一个表达式,而不是一个代码块

因此,lambda通常要比def功能小,仅能在lambda主体中封装有限的逻辑进去,连if这样的语句都不能够使用。这是有意设计的——它限制了程序的嵌套:lambda是一个为编写简单的函数而设计的,def用来处理更大的任务

3) lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

5|33. lambda函数的语法


lambda arg1, arg2, ... argN: expression

实例1:可以将lambda函数对象赋值给变量 f 

#定义lambda函数,将其赋值给变量f f = lambda x, y, z: x + y + z #通过变量f来调用函数,并打印结果 print(f(2, 3, 4)) 运行结果: 9

实例2:在lambda函数中也可以使用默认参数

#定义lambda函数,使用默认参数 x = lambda a = "fee", b = "fie", c = "foe": a + b + c #通过变量x来调用函数,并打印结果 print(x()) 运行结果: feefiefoe

6|0六. 返回值


6|11. 语法:


return 参数(可选,没有参数,则返回None)

6|22. 注意:


1) 返回值可以是任何类型的变量

2) 返回值也可以是表达式

3) 可以返回一个/多个变量,可以用逗号隔开或用元组

def func(): return 返回值1,返回值2 接收值1,接收值2 = func() print(接收值1,接收值2)

4) 函数体执行过程中遇到return,意味着函数调用结束

5) 函数中没有return关键字,默认返回None

6) 使用较多,返回的值可以用来传递给其他函数

 

 

 

7|0参考文章


http://www.runoob.com/python3/python3-function.html

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

 


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/9230396.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(381)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2017-06-26 《Advanced Bash-scripting Guide》学习(七):描述、列表和确定是否可以安装一个rpm包
点击右上角即可分享
微信分享提示