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 ...
随机推荐
- 【FAQ】Ubuntu环境下ant编译android代码问题
在Ubuntu14.04环境下,编译android程序时候,运行ant debug的时候出现如下异常:
- jQuery 创建html
jQuery 创建html
- Ubuntu git 安装、生成sshkey、克隆、切换分支
#1.安装git apt-get install git; #2生成公钥私钥文件 2.配置git账户: git config --global user.name "yourname&quo ...
- iOS编程 手动忽略clang编译器警告
在iOS开发过程中, 我们可能会碰到一些系统方法弃用, weak.循环引用.不能运行之类的警告. 有代码洁癖的孩子们非常想消除他们, 今天就让我们来一次Fuck 警告.! 首先学会主要的语句 #pra ...
- pat(B) 1037. 在霍格沃茨找零钱(水题)
代码: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> ...
- 【MyBatis学习12】MyBatis中的一级缓存
缓存的作用是减轻数据库的压力,提高数据库的性能的.mybatis中提供了一级缓存和二级缓存,先来看一下两个缓存的示意图: 从图中可以看出: 一级缓存是SqlSession级别的缓存.在操作数据库时 ...
- python元组、列表的异同总结
定义的异同: 列表(list):[] list是一种有序的集合,能够随时加入和删除当中的元素.用 [] 表示. 列表的三个特性:①创建之后也能够加减改动元素. ②元素能够是数字.字符.变量等.也能够混 ...
- 牛散NO.1:MACD计啜诱多,勾魂枪连环夺命时
上证日线“连环夺命勾魂枪” 话说MACD中圈C的回勾,好事者皆认为新的冲击波即将曙光再现.伴随着K线出现红柱中阳,更多的投资者将会被这一勾诱惑得群情亢奋,盲断行情又要 起来了.但往往事与愿违,“潘金莲 ...
- BZOJ 2792 Poi2012 Well 二分答案
题目大意:给定一个非负整数序列A.每次操作能够选择一个数然后减掉1,要求进行不超过m次操作使得存在一个Ak=0且max{Ai−Ai+1}最小,输出这个最小值以及此时最小的k 二分答案,然后验证的时候首 ...
- YII2 学习
下载地址: http://www.yiiframework.com/download/ http://www.yiichina.com/download 直接选择basic模板下载即可 下载之后解压到 ...