python 函数
来源:互联网 发布:软件设计师考试好考吗 编辑:程序博客网 时间:2024/06/05 12:47
Python的函数是由一个新的语句编写,即def,def是可执行的语句--函数并不存在,直到Python运行了def后才存在。
函数是通过赋值传递的,参数通过赋值传递给函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义函数的一些规则
- 函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
- 函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号;函数名是区分大小写的, 函数名不能是保留字。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
我们来举个监控的例子
while True: if cpu利用率 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 硬盘使用空间 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 内存占用 > 80%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接
这样是不是很烦。那么我们来提取简化一下
def 发送邮件(内容) #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接while True: if cpu利用率 > 90%: 发送邮件('CPU报警') if 硬盘使用空间 > 90%: 发送邮件('硬盘报警') if 内存占用 > 80%:
很显然,第二种方法更合理,简练,这就已经很明显得表现出来了函数式编程的优势,下面我们来看一下函数式编程和面向过程编程的区别:
- 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
- 面向对象:对函数进行分类和封装,让开发“更快更好更强...”
另外,函数式编辑最重要的是增强代码的重用性和可读性(这好像是所有语言公共的目标)
标准语法
def函数名(参数):
....
.....
函数体
.....
.....
如上面的规则所说的一样,函数的定义主要包括
· def:表示函数的关键字
· 函数名:函数的名称,日后根据函数名调用函数
· 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
· 参数:为函数体提供数据
· 返回值:当函数执行完毕后,可以给调用者返回数据。
返回值:
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
def发送短信():
发送短信的代码...
if 发送成功:
return True
else:
return False
while True:
# 每次执行发送短信函数,都会将返回值自动赋值给result
# 之后,可以根据result来写日志,或重发等操作
result = 发送短信()
if result==False:
记录日志,短信发送失败...
参数
1:无参数实现
defCPU报警邮件()
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
def 硬盘报警邮件()
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
def 内存报警邮件()
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
while True:
if cpu利用率>90%:
CPU报警邮件()
if 硬盘使用空间> 90%:
硬盘报警邮件()
if 内存占用> 80%:
内存报警邮件()
有参数实现
def发送邮件(邮件内容)
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
while True:
if cpu利用率>90%:
发送邮件("CPU报警了。")
if 硬盘使用空间> 90%:
发送邮件("硬盘报警了。")
if 内存占用> 80%:
发送邮件("内存报警了。")
函数又分为三中不同的参数
1:普通参数
2:默认参数
3:动态参数
我们先来看下普通参数
deftest_print(name): ### 定义一个函数名为 test_print的函数,接收参数赋值给name
print("your name is %s:"% name) ### print打印结果
test_print('zhang') ###调用test_print函数 传递’zhang’的实参
## name : test_print 函数的形式参数,简称形参
## zhang: test_print 函数的实际参数,简称实参
默认参数:
deftest_print(name,age = 20): ###定义一个函数名为 test_print 的函数,接收参数赋值给name,age,哪果没有age值,默认为20
print("your name is %s: and your age is%s"% (name,age)) ### print 打印结果
test_print('zhang') ###调用 test_print函数 只传递name的实参
输出结果可以看到 age 默认应用了default的20
your nameis zhang: and your age is 20
下面给age 传入实参
deftest_print(name,age = 20): ###定义一个函数名为 test_print 的函数,接收参数赋值给name,age,哪果没有age值,默认为20
print("your name is %s: and your age is%s"% (name,age)) ### print 打印结果
test_print('zhang',25) ### 调用test_print函数 只传递name的实参
结果
your nameis zhang: and your age is 25
test_print(12,34,56,25)
当我们这样调用上面的程序时,会发现报错了
Traceback(most recent call last): File"C:/Users/zhang/PycharmProjects/S12/day3/Test_Def.py", line 185, in<module> test_print(12,34,56,25) ### 调用 test_print函数 只传递name的实参TypeError:test_print() takes from 1 to 2 positional arguments but 4 were given
为什么?提示只有两个位置参数,我传了4个,那么当我们涉及到多个参数时,我们就可以使用动态参数
动态参数-序列
deftest_print(*args):
print(args) ### print 打印结果
test_print(12,34,56,25) ### 直接传入多个参数
结果
(12, 34,56, 25)
deftest_print(*args):
print(args) ### print 打印结果
#test_print(12,34,56,25) ### 直接传入多个参数
zhang = [11,22,33,44,'age'] ### 定义一个列表
test_print(zhang) ###调用函数传入这个列表
结果看到依然可以
([11, 22,33, 44, 'age'],)
动态参数-字典
那么当我们再传入字典时会是什么样的结果呢?
deftest_print(*args):
print(args) ### print 打印结果
#test_print(12,34,56,25) ### 直接传入多个参数
zhang = {'name':'zhang','age':25} ### 定义一个字典
test_print(zhang) ###调用函数传入这个列表
我们发现返回的结果还是在()内
({'age':25, 'name': 'zhang'},)
怎么办?我们使用另外一个方法
deftest_print(**kwargs):
print(kwargs) ### print打印结果
#test_print(12,34,56,25) ### 直接传入多个参数
zhang = {'name':'zhang','age':25,} ### 定义一个字典
test_print(**zhang) ### 调用函数传入这个列表
结果显示如我们所愿
{'age':25, 'name': 'zhang'}
动态参数-序列加字典
当我们即想传序列又想加上字典时,我们可以这样
deftest_print(*args,**kwargs):
print(args)
print(kwargs)
t1 = [1,2,3,'好好学习']
d1 = {'name':'zhang','age':25}
输出结果
([1, 2,3, '好好学习'],){'name':'zhang', 'age': 25}
- python函数
- python 函数
- python 函数
- Python 函数
- python 函数
- PYTHON函数
- python 函数
- Python函数
- python 函数
- Python 函数
- Python 函数
- Python 函数
- python函数
- python函数
- python 函数
- Python 函数
- Python函数
- Python函数
- C#及wpf WebBrowser截图
- CUDA编程——Warp Divergence
- simple Ubuntu chat service
- vi命令
- 2016.1.16 Maven使用和项目整理
- python 函数
- 获取手机存储空间大小
- 【异常】百度定位sdk Couldn't load locSDK3 from loader dalvik findLibrary returned null
- jQuery EasyUI使用教程之在数据网格中自定义排序
- windows使用git时出现:warning: LF will be replaced by CRLF
- Fragment之间的跳转,和数据的传递
- 设计模式C++实现:单例模式(Singleton)
- 2016.1.18 SlidingMenu和Viewpager的使用
- json对象与字符串的转换方法