python学习【第四篇】python函数 (一)
一、函数的介绍
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数
函数的好处:
- 代码重用
- 保持一致,易于维护
- 可扩展性
二、函数的定义
函数的定义规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
- 函数内容以冒号起始,并且缩进
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
函数的语法:
def 函数名:
函数体
函数的示例:
def print_hello():
"""
打印hello
:return:
"""
print("hello")
三、函数的返回值
根据示例来看下python的返回值:
def fun2():
msg = "hello world"
return msg
def fun3():
return 1, 2 ,3
aa = fun1()
bb = fun2()
cc = fun3()
print(aa)
print(bb)
print(cc)
# 输出结果:
# None
# hello world
# (1, 2, 3)
总结:
1.函数中如果没有return语句返回,那么python函数会默认返回None
2.函数返回值数为0,函数默认返回None;函数返回值数为1是,则返回object;返回值数大于1时,则返回的是一个tuple;
四、函数的参数
函数参数的原则:
- 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
- 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
- 位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)
- 默认参数
- 参数组
普通参数
def fun1(name): # name为形式参数
print(name)
aa = "hello"
fun1(aa) # aa为实参
默认参数
def func(name, age=18):
print("%s:%s" % (name, age))
# 指定参数
func('wupeiqi', 19) # 使用默认参数
func('alex')
# 注:默认参数需要放在参数列表最后
动态参数
def func1(*args):
print(args)
# 执行方式一
func1(11, 33, 4, 4454, 5)
# 执行方式二
li = [11, 2, 2, 3, 3, 4, 54]
func1(*li)
def func2(**kwargs):
print(kwargs)
# 执行方式一
func2(name='wupeiqi', age=18)
# 执行方式二
dict1 = {'name': 'fyh', "age": 18, 'gender': 'male'}
func2(**dict1)
万能参数
# 万能参数
def func(*args, **kwargs):
pass
五、全局变量与局部变量
全局变量与局部变量的本质在于作用域的不同
全局变量说白了就是在整个py文件中声明,全局范围内都可以使用
局部变量是在某个函数内声明的,只能在函数内部使用
举例:
def fun1():
name = "aa"
print(name)
执行结果:

报错的原因:试图访问局部变量而报的错
局部变量与全局变量变量名一样
- 全局变量与局部变量名一致,函数内部会优先使用局部变量
- 修改局部变量不会影响到全局变量
name = "bb"
def print_name():
name = "aa"
print(name)
print_name()
print(name)
# 打印的结果为# aa# bb
global关键字
使用global关键字:则会告诉python编译器,这个变量是全局变量而不是全局变量,这样在函数体内修改变量会影响全局了
name = "bb"
def print_name():
global name
name = "aa"
print(name)
print_name()
print(name)
# 打印的结果:
# aa
# aa
nonlocal关键字
nonlocal关键字在python3中新出现的关键字,作用:用来在函数或其他作用域中使用外层(非全局)变量
nonlocal 适用于在局部函数 中 的局部函数, 把最内层的局部 变量设置成外层局部可用,但是还不是全局的。
注:nonlocal必须要绑定局部变量
def fun1():
num = 1
def fun2():
nonlocal num # 此处不能使用global,只能使用nonlocal
num += 1
return num
return fun2
aa = fun1()
print(aa())
六、匿名函数
lamba函数也叫匿名函数,即函数没有具体的名称
lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值
def calc(x):
return x + 1
# 用lambda进行改写如下:
calc2 = lambda x: x + 1
# 进行调用
print(calc2(10))
七、初识高阶函数
map函数
map处理序列中的每个元素,得到一个结果(迭代器),该迭代器元素个数与位置不变
list1 = [1, 2, 3, 4, 5] list2 = map(lambda x: x+1, list1) # map的第一个参数为函数,后面的参数为可迭代对象 print(list(list2)) # 结果:[2, 3, 4, 5, 6]
filter函数
filter(过滤):遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来,组成新的迭代器
list1 = ["1111aaa", "2222aaa", "3333aaa", "4444", "5555", "6666"]
list2 = filter(lambda x: x.endswith("aaa"), list1) # 有过滤的作用
print(list(list2))
# 运行结果:['1111aaa', '2222aaa', '3333aaa']
reduce函数
reduce 处理一个序列,把序列进行合并操作
from functools import reduce list1 = [1, 2, 3, 4, 5] aa = reduce(lambda x, y: x+y, list1) # 前一个参数的函数必须是两个参数 print(aa) # 运行结果:15
八、内置函数

学习资料参考:https://docs.python.org/3/library/functions.html?highlight=built#ascii
python学习【第四篇】python函数 (一)的更多相关文章
- python学习第四讲,python基础语法之判断语句,循环语句
目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...
- Python学习【第九篇】函数
函数 函数是什么? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上而下实现功能,其往往用一段代码来实现指定功能,开发过 ...
- Python 学习 第七篇:函数1(定义、调用和变量的作用域)
函数是把一些语句集合在一起的程序结构,用于把复杂的流程细分成不同的组件,能够减少代码的冗余.代码的复用和修改代码的代价. 函数可以0个.1个或多个参数,向函数传递参数,可以控制函数的流程.函数还可以返 ...
- R语言学习 第四篇:函数和流程控制
变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...
- Python【第四篇】函数、内置函数、递归、装饰器、生成器和迭代器
一.函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 1.定义 def 函数名(参数): ...
- Python 学习 第八篇:函数2(参数、lamdba和函数属性)
函数的参数是参数暴露给外部的接口,向函数传递参数,可以控制函数的流程,函数可以0个.1个或多个参数:在Python中向函数传参,使用的是赋值方式. 一,传递参数 参数是通过赋值来传递的,传递参数的特点 ...
- Python 学习 第四篇:动态类型模型
Python的变量不用声明,赋值之后就可以直接使用,类型是在运行过程中自动确定的,这就是动态类型模型.该模型把变量和对象设计成两个不同的实体,对象是存储数据的地方,对象的类型是由初始值自动决定的,而变 ...
- python开发第四篇:函数(1)
函数 阅读目录 一 函数知识体系 二 函数基础 三 函数对象.函数嵌套.名称空间与作用域.装饰器 四 迭代器.生成器.面向过程编程 五 三元表达式.列表推导式.生成器表达式.递归.匿名函数.内置函数 ...
- Python学习第四十天函数的装饰器用法
在软件开发的过程中,要遵循软件的一些原则封装的,不改变原有的代码的基础增加一些需求,python提供了装饰器来扩展函数功能,下面说说函数装饰器用法 def debug(func): def ...
- Python学习第四篇——列表访问与判定
avilable_foods=["soup","beaf","noddle","pepper"] request_foo ...
随机推荐
- ActiveMQ Spring 集成配置
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms&l ...
- CSS Flexible 布局兼容性以及解决方案
1.兼容性 https://caniuse.com/#feat=flexbox IE11以及以下不支持. 2.解决方案 flexibility库 https://github.com/jonathan ...
- SVN学习(二)——SVN 提交、更新、解决冲突等操作步骤
1. 纳入版本控制 ①新建文件abc.txt ②在文件上点右键 ③添加后文件图标发生变化 2. 提交 ①使用TortoiseSVN可以提交具体某一个文件,或某一个目录下的所有改变.方法就是在想要提交的 ...
- 华为AR路由器AR207-S配置pppoe拨号上网图解实例
- EF实体查询出的数据List<T>转DataTable出现【DataSet 不支持 System.Nullable<>】的问题
public static DataTable ToDataTable<T>(this IEnumerable<T> varlist, CreateRowDelegate< ...
- bzoj1670【Usaco2006 Oct】Building the Moat 护城河的挖掘
1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 387 Sol ...
- 摄像头驱动_摄像头驱动程序必需的11个ioctl及摄像头数据的获取过程
摄像头驱动_摄像头驱动程序必需的11个ioctl及摄像头数据的获取过程 根据虚拟驱动vivi的使用过程彻底分析摄像头驱动// 1~2都是在v4l2_open里调用1. open2. ioctl(4, ...
- virtualenv下使用matplotlib
Unable to “import matplotlib.pyplot as plt” in virtualenv (PyMVPA) SimilarFacedeMacBook-Pro:PyMVPA ...
- 如何使用qperf来衡量网络带宽和延迟性能?
解析度 安装 qperf从RHEL服务器通道安装: 生的 # yum install qperf 检查带宽 服务器 让一个系统监听服务器: 生的 server # qperf 服务器默认在TCP端口1 ...
- 23:LVS客户端配置脚本案例
[root@web03 scripts]# cat prevent_arp.sh #!/bin/bash lo_ip=$(ip a s lo|grep "10.0.0.1[3]/32&quo ...