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 ...
随机推荐
- jquery ajax/post 请求 案例
@RequestMapping("/hello") @ResponseBody public Hello getJson(HttpServletRequest requ ...
- [TypeScript] Infer the Return Type of a Generic Function Type Parameter
When working with conditionals types, within the “extends” expression, we can use the “infer” keywor ...
- 持续集成之代码质量管理-Sonar
原文:http://blog.csdn.net/abcdocker/article/details/53840582 Sonar介绍 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Son ...
- bye 2013 hello 2014
最近两个月除了必要的工作外,其余时间都在干一些我其实平时很少干的事, 喝酒.唱歌.打麻将.玩牌.以及到处跑找朋友玩,也许是过年的原因我放纵了自己,也许是自己心中的烦恼.我的博客记录着我每次看书学习的笔 ...
- 使用dynamic类型来优化反射
什么是dynamic类型?微软给出的官方文档中这样解释:在通过 dynamic 类型实现的操作中,该类型的作用是绕过编译时类型检查. 改为在运行时解析这些操作. dynamic 类型简化了对 COM ...
- TCP/IP ---封装与分用
封装 当应用程序用T C P传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络.其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图1 - 7所示 ...
- Delphi获得与设置系统时间格式《转》
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syst ...
- sqlserver利用链接服务器查询或同步本地数据库和远程数据库
这个实际上是SQLserver的分布式查询:如果一个项目需要二至多台服务器,而我们又必须从几台服务器中将数据取出来,这就必须用分布式查询!在这里有两个概念:本地数据源.远程数据源!本地数据源指的是单个 ...
- C语言 指向结构体变量的指针
一个指向变量的指针表示的是占内存中起始位置 一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组 定义结构体变量的指针: //假设已有一个结构体名为Stu ...
- 【SSH三大框架】Hibernate基础第九篇:cascade关联关系的级联操作
这里要说的是Hibernate的关联关系的级联操作,使用cascade属性控制. 依旧用部门和员工举例.多个员工相应一个部门(多对一关联关系) 员工类:Employee.java package cn ...