python笔记05-----函数
函数
编程序语言中函数定义:函数是逻辑结构化和过程化的一种编程方法
def func(i): # def :定义函数的关键字;func:函数名;()内可以定义形参
i += 1 # 代码块或程序处理逻辑
return i # 定义返回值 f = func(10) # 函数调用,传参 传了一个10
print(f) # 返回结果就是 10 += 1 也就是11
1.1 有返回值和无返回值
def test1():
print("in test1") def test2():
print("in test2")
return 1 print(test1())
print(test2())
结果
in test1
None
in test2
1
1.2 函数的参数
返回值:函数执行的结果
def test1():
return 0 def test2():
return 1,'hello',[1,2,3,4,5] print("test1:",test1())
print("test2:",test2())
结果
test1: 0
test2: (1, 'hello', [1, 2, 3, 4, 5])
1.3 位置参数
def test(x,y,z):
print(x)
print(y)
print(z) test("hostname","port","IP") #默认按顺序 ,也可以指定:test("hostname",z="port",y="IP")
结果
hostname
port
IP
1.4 默认参数
def test(x,y=2):
print(x)
print(y) test(1) #默认参数调用的时候,非必需传递,如果指定传递,按照指定的参数>默认参数优先级
结果
1
2
1.5 参数组
def test(*x):
print(x) test("bj","sh")
test(*["bj","sh"]) #结果都是返回元组
('bj', 'sh')
('bj', 'sh')
1.6 动态参数*args 和**kwargs
*args 可以传各种类型:列表,字典,元组,集合,字符串,数字等
def test(*args):
print(args) test("","w","s","y")
test(1,2,3,4,5,6)
test(["name","age","sex"])
test(("name",)) test({"name":"boy","age":10})
结果
('1', 'w', 's', 'y')
(1, 2, 3, 4, 5, 6)
(['name', 'age', 'sex'],)
(('name',),)
({'name': 'boy', 'age': 10},)
**kwargs 传指定 最后输出字典
def test1(**kwargs):
print(kwargs) test1(name="kk",age=18,sex="man") #传出来结果为字典
结果
{'name': 'kk', 'age': 18, 'sex': 'man'}
1.7 全局变量与局部变量
全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时
在定义局部变量的子程序内,局部变量起作用,在其他地方全局变量起作用
global #定义新的全局变量
home = "bj"
name = "wang" def my_home(name):
global home
home = "hebei"
name = "wsy"
print("in func:",name,home)
print(name)
my_home(name)
print(home)
1.8 递归
在函数内部,可以调用其他函数,如果一个函数在内部调用自身本身,这个函数就是递归函数
递归的特性:
1.必须有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归层次过多导致栈溢出(在计算机中,函数调用是通过栈这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧。由于栈的大小不是无限的,所有,递归调用次数过多,会导致栈溢出)
递归实例:
def num(x):
print(x)
y = int(x/2)
if y > 0:
return num(y)
print("END:",x) num(20)
输出结果
20
10
5
2
1
END: 1
1.9 高阶函数和匿名函数
高阶函数
高阶函数的定义:一个函数接收另一个函数作为参数
def add(a,b,c):
return c(a) + c(b) res = add(6,-8,abs) #abs 绝对值
print(res)
结果为14
匿名函数
匿名函数:也叫lambda表达式
匿名函数的核心:一些简单的需要用函数去解决的问题,匿名函数的函数体只有一行
参数可以有多个,用逗号隔开
返回值和正常的函数一样可以是任意的数据类型
计算两个数字之和
a = lambda x,y:x+y #x,y 为传入的两个参数
print(a(1,3))
a = lambda x,y,z,a:x+y+z+a #可以定义多个参数
print(a(1,3,4,6))
将一个字典的key和value对调
dic = {'name': "wsy", 'Age': 20}
res = {dic[i]:i for i in dic}
dic = res
print(dic)
结果
{'wsy': 'name', 20: 'Age'}
2.0 闭包
闭包:
内部的函数
包含了对外部函数作用域中变量的引用
def test():
name = "wsy"
def index():
print("func is index" ,name) return index()
test()
结果:
func is index wsy
判断闭包函数的方法:__closure__
def test():
name = "wsy" def index():
print("func is index" ,name)
print(index.__closure__) #判断函数是否为闭包
return index()
test()
结果:
(<cell at 0x000000000203DE88: str object at 0x00000000020AFF80>,)
func is index wsy
如果变量在上一个函数体外,会返回None
python笔记05-----函数的更多相关文章
- Python:笔记(2)——函数与模块
Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...
- python笔记05
python笔记05 数据类型 上个笔记知识点总结: 列表中extend特性:extend,(内部循环,将另外一个列表,字符串.元组添加到extend前的列表中) li.extend(s),将s中元素 ...
- 我的python笔记05
Python 之路 Day5 - 常用模块学习 本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve ...
- Python学习--05函数
Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.我们已经知道Python提供了许多内建函数,比如print().但我们 ...
- python笔记之函数
函数 >>> def funTest(param1): ... 'this is function document string.' #正文需要有缩进 ... return par ...
- python笔记05:条件、循环和其它语句
5.1 print和import的更多使用方式 5.1.1 使用逗号输出 print 'Age',42 print 1,2,3 如果要同时输出文本和变量值,又不希望使用字符串格式化的话,那么这个特性就 ...
- python笔记22-literal_eval函数处理返回json中的单双引号
前言 在做接口测试的时候,最常见的接口返回数据就是json类型,json类型数据实际上就是字串,通常标准的json格式是可以转化成python里面的对应的数据类型的 有时候开发返回的数据比较坑,不按常 ...
- python笔记4 - 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...
- Python笔记008函数(2)
1. 昨日内容回顾: def 函数(): 函数体 return 值 如果不写return,默认返回None.可以单独返回一个值,也能够以元组的形式返回多个值.(不要把print和retu ...
- python笔记-字符串函数总结
字符串函数: chr() 数字转ASCII chr(96)="a" ord() ASCII转数字 ord("a")=96 isspace() 判断是否为空格 s ...
随机推荐
- C/C++中如何获取数组的长度?
C/C++中如何获取数组的长度? 收藏 C.C++中没有提供 直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方 ...
- ACL登陆认证
前篇文章ACL授权实例介绍了授权,授权完成之后,就要进行认证.ACL的认证主要分为登陆认证与即时认证.所谓登录认证就是在用户登陆的时候,进行信息认证.根据用户Id,加载上来该用户所拥有的权限模块:而即 ...
- 团队项目第六周——Alpha阶段项目复审
排名 队名 项目名 优点 缺点 1 大猪蹄子队 四六级背单词游戏 功能开发出来了,界面简洁美观. 功能的确开发出来了,但是还未完成整个程序.不过考虑到开发时长问题,可以理解.页面还是比较简洁,但是测试 ...
- Android-Android版美图秀秀
Android版美图秀秀,主要是修改图片的显示效果,修改图片的透明的显示范围,修改图片的红色显示范围,修改图片绿色显示范围,修改图片蓝色显示范围: 想要修改图片的颜色就必须要重新绘制,一想到重新绘制就 ...
- SQL Server Extended Events 进阶 1:从SQL Trace 到Extended Events
http://www.sqlservercentral.com/articles/Stairway+Series/134869/ SQL server 2008 中引入了Extended Events ...
- c#位运算小例子笔记
关于位运算,网上有挺多好的博客介绍过,我就不多解释了 这里只记录一个小例子,是在理解位运算时候写的,帮助自己加深一下印象,做个笔记mark一下 具体场景 摇骰子游戏 1每个骰子有6个点,1-3为小,4 ...
- C#计算机性能参数
Process proc = Process.GetCurrentProcess(); //string info = "内存:" + (Environment.WorkingSe ...
- Win(Phone)10开发第(3)弹,简单的Demo程序网络请求json解析列表显示
先分享一个由Json字符串直接生成解析对应的类的工具: jsonclassgenerator14 百度天气接口 下面是由一个小功能(又特么的是天气)的实现,记录下下UAP的流程和结构(其实跟之前一模一 ...
- 红帽子系统链接加vm15秘钥一份
vm15秘钥:YZ718-4REEQ-08DHQ-JNYQC-ZQRD0 红帽子系统下载链接:http://www.ddooo.com/softdown/60964.htm
- Java基础学习篇---------多态
一.多态性的理解 1.向上转型:子类为父类对象实例化,调用的一定是子类覆写的方法,他们之间找的是共性 2.向下转型:子类扩充了父类的某些功能,而父类中没有该功能,他们之间找的是特性 案例: Numbe ...