10、python函数
前言:本文主要介绍python函数的定义和调用、函数的参数、函数的作用域、内置函数。
一、函数的定义和调用
1.函数的作用
对特定的一些功能进行封装,提高代码的重用率,进而提升开发的效率,格式:
def 函数名()
# 函数体
2.函数名的命名规范
1)可以由字母、数字及下划线(_)组成,但不能用数字开头,且不能使用python中的关键字。
2)函数命名的风格: 单词之间下划线隔开(python中函数命名推荐这种风格), 大驼峰小驼峰写法 ,如:UserName、userName英文单词首字母大写。
3.函数的返回值:return
语法:return 表达式
1)函数的返回值是由return来决定的,return后面写什么,函数的返回值就是什么
2)如果函数中没有return,那么函数的返回值默认为 None
3)return 后面没有任何内容,返回值也是None
4)函数要返回多个数据,可以在return后面,每个数据之间用逗号隔开,调用函数之后接收到的是个元组形式的数据
注意:return的作用除了返回结果外,也可以用于结束函数的运行,只要函数中执行到return,就直接返回内容,跳出函数,return后面的代码就不会执行
4.调用函数
函数名(),示例如下:
def func():
print('python666')
return "abc", 4444
print("") # 该行不会被执行 res = func()
print(res)
运行结果:
C:\software\python\python.exe D:/myworkspace/test/test/test.py
python666
('abc', 4444) Process finished with exit code 0
二、函数的参数
1.函数形参和实参
定义的参数称为:形参
调用实际传递的为:实参
2.参数传递的两种形式:
位置参数:按位置顺序进行传递
关键字参数:通过关键字指定传给某个参数
# 位置参数(按位置顺序进行传递)
def add_num(a, b, c): # a,b是形参,没有真正的值,用于接收实参
return a + b - c res1 = add_num(67, 12, 1) # 此时传入的67,12是实参
print(res1) # 关键字参数(通过关键字指定传给某个参数)
res2 = add_num(b=34, a=12, c=11)
print(res2) # 参数混用时,位置参数写最前面,关键字参数写在后面,不能重复传
res3 = add_num(30, c=12, b=12)
print(res3)
运行结果:
C:\software\python\python.exe D:/myworkspace/test/test/test.py
78
35
30 Process finished with exit code 0
3.函数定义的三种形参:
- 必需参数 如:def add_num(a, b, c) ,a,b,c三个参数都必须要传
- 默认参数(缺省参数) 如:def add_num(a, b, c=99) ,c是默认参数,可以传,可以不传(不传时直接使用c=99)
- 不定长参数:如:def add_num(a, b, *args, **kwargs) ,其中a和b是必需参数,*args 可以不传,也可以传多个,它接收必需参数、默认参数完之外的位置参数,以元组的形式保存,**kwargs 可以不传,也可以传多个,接收必需参数、默认参数之外的关键字参数,以字典的形式保存
def test(a, b, c, *args, **kwargs):
print("a的值", a)
print("b的值", b)
print("c的值", c)
print("*args的值", args)
print("**kwargs的值", kwargs) va1 = test(11, 22, 33, 4, 3, 2)
va2 = test(11, 5, 6, 7, g=33, k=22, f=12)
print(va1, va2)
运行结果(有None是因为函数中没有返回值,调用了两次函数因此打印了两个None):
C:\software\python\python.exe D:/myworkspace/test/test/test.py
a的值 11
b的值 22
c的值 33
*args的值 (4, 3, 2)
**kwargs的值 {}
a的值 11
b的值 5
c的值 6
*args的值 (7,)
**kwargs的值 {'g': 33, 'k': 22, 'f': 12}
None None Process finished with exit code 0
扩展:不定长参数可以使用*对元组(列表也可以,但一般不用)进行拆包,**可以对字典进行拆包,拆包原理如下:
# 拆包
def func():
return 11,22,33 # 当返回结果有多个值时,会以元组的形式返回 c1 = func()
print(c1) # 返回的是一个元组(11,22,33) a,b,c =func() # 可以通过变量把返回的元组进行拆包,接收对应的值,a接收了11,b接收了22,c接收了33
print(a,b,c) # 返回对应的元素11,22,33
运行结果:
C:\software\python\python.exe D:/myworkspace/test/test/test.py
(11, 22, 33)
11 22 33 Process finished with exit code 0
拆包在自动化测试中有很大的作用,如果不理解,可以动手多敲几遍,以下是拆包示例:
def func(a, b, c):
print('这是', a)
print('这是', b)
print('这是', c) # 利用*、**分别对元组、字典拆包:只能用在函数调用时使用
# 对元组进行拆包
func(*(1, 2, 3)) print('-------分割线-------')
tu = (4, 5, 6)
func(*tu) print('-------分割线-------')
# 对字典进行拆包, 注意**kwargs接收的是接收必需参数、默认参数之外的关键字参数
# 因此字典的键要与函数的形参一致
dic = {'a': 88, 'b': 90, 'c': 91}
func(**dic)
运行结果:
C:\software\python\python.exe D:/myworkspace/test/test/test.py
这是 1
这是 2
这是 3
-------分割线-------
这是 4
这是 5
这是 6
-------分割线-------
这是 88
这是 90
这是 91 Process finished with exit code 0
三、函数的作用域
1.全局变量
直接定义在py文件(即模块)中的变量,叫全局变量,在该文件中任何地方都可以使用
2.局部变量
在函数内部定义的变量,叫做局部变量,只能在该函数内部使用,函数外部无法使用
3.声明局部变量
关键字:global 在函数内部声明全局变量。
变量的查找过程:由内到外(先找函数自身的,没有再去外面找)。
如果要在外部使用函数内部定义的局部变量,需要声明该变量,简单来说就是告诉程序,这个变量在这个模块内都能使用。
name = "张三" # 定义一个全局变量 def func():
# global a # 如果要声明全局变量,要加上这句
a = 100 # 定义一个局部变量
print(a)
print(name) func() # 调用函数
print("------分割线-----")
print(name) # 全局变量哪里都能使用
print(a) # 这是一个局部变量,打印a运行会报错说a没有被定义,如果要使用a就要声明a为全局变量 print("------分割线-----")
aa = 10
def func():
print(aa) # 变量的查找过程:由内到外(先找自身的,没有再去外面找)
func()
运行结果(因为报错了,所以后面的aa没有打印出来,只要声明全局变量就不会报错):
C:\software\python\python.exe D:/myworkspace/test/test/test.py
100
张三
------分割线-----
张三
Traceback (most recent call last):
File "D:/myworkspace/test/test/test.py", line 12, in <module>
print(a) # 这是一个局部变量,打印a运行会报错说a没有被定义,如果要使用a就要声明a为全局变量
NameError: name 'a' is not defined Process finished with exit code 1
四、python内置函数
内置函数就是python编程语言中预先已经定义的函数,直接调用即可,常用的内置函数如下:
- len():获取 列表\字符串\元组\字典 中的元素总数量(数据的长度)
- eval():识别字符串中的python表达式
- zip(): 聚合打包
- max():获取数据中元素的最大值
- min():获取数据中元素的最小值
- sum():对元素进行求和
更多的内置函数有兴趣的可以在菜鸟教程中查看,链接:https://www.runoob.com/python/python-built-in-functions.html
10、python函数的更多相关文章
- Python学习-10.Python函数定义(二)
在Python中定义函数的时候,可以使用参数默认值的方式定义函数 例子: def welcome(who,state='is',action='talking'): print(who,state,a ...
- (10)Python函数
- python函数和lambda表达式学习笔记
1. python函数 不同于其他语言,python支持函数返回多个值 为函数提供说明文档:help(函数名)或者函数名.__doc__ def str_max(str1, str2): ''' 比较 ...
- 巨蟒python全栈开发-第10天 函数进阶
一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参 ...
- 10.Python初窥门径(函数进阶)
Python(函数进阶) 一.函数的传参(接上期) 形参角度(一共四种,后两种) 动态参数(万能参数)* # 定义一个函数时,*所有的位置参数聚合到一个元组中 def func(*args): # * ...
- 10分钟学会Python函数基础知识
看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了.最好还是把代码敲一下. 一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运 ...
- python学习笔记(10)函数(二)
(函数的参数&递归函数) 一.函数的参数 Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处 ...
- python 函数之day3
一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...
- Python函数信息
Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...
随机推荐
- P1919 FFT加速高精度乘法
P1919 FFT加速高精度乘法 传送门:https://www.luogu.org/problemnew/show/P1919 题意: 给出两个n位10进制整数x和y,你需要计算x*y. 题解: 对 ...
- UI 素材相关收集
图标素材收藏网址 阿里:iconfont.cn 图片压缩:https://tinypng.com/ gif动图压缩:https://tool.gifhome.com
- 【Docker】安装MySQL彻底解决3306端口占用问题
1.问题闪现: 初次up mysql报3306端口被占用 yunduo@YunDuo:~/Work/Learning/Docker/docker_compose$ docker-compose up ...
- filter 开发
在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...
- sybase的存储过程编写经验和方法
1.如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨 ...
- Java并发编程系列-(8) JMM和底层实现原理
8. JMM和底层实现原理 8.1 线程间的通信与同步 线程之间的通信 线程的通信是指线程之间以何种机制来交换信息.在编程中,线程之间的通信机制有两种,共享内存和消息传递. 在共享内存的并发模型里,线 ...
- xcode无线调试
前言: xcode9 以上才会有无线调试这个功能,换了一个type-c口的mac,公司的新电脑,但是公司不给配转接口,到某东看了一下,type-c口同时可以转化usb和VGA的要198,官网差不多50 ...
- Kafka学习笔记4--Kafka消费者的客户端(PHP)开发
一.准备工作 虽然 Kafka 是用 Java/Scala 语言编写的,但这不妨碍它对多语言的支持.可以在 Kafka 官网的 CLIENTS 查看 Kafka 支持的语言,其中包括 C/C++.Py ...
- lua字符串分割函数[适配中文特殊符号混合]
lua的官方函数里无字符串分割,起初写了个简单的,随之发现如果是中文.字符串.特殊符号就会出现分割错误的情况,所以就有了这个zsplit. function zsplit(strn, chars) f ...
- 洛谷$P$3327 约数个数和 $[SDOI2015]$ 莫比乌斯反演
正解:莫比乌斯反演 解题报告: 传送门! 先考虑证明一个结论,$d_{i\cdot j}=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]$ 看起来就很对的样子,但还是证下趴$QwQ ...