python基础(十)--函数进阶
嵌套函数
>>> graphic = '三角形'
>>> def chang():
graphic = '正方形'
def chang1(): #内部嵌套的函数命名可相同
graphic = '圆形'
print('第三层打印',graphic)
chang1()
print('第二层打印',graphic)
>>> chang()
第三层打印 圆形
第二层打印 正方形
>>> print('第一层打印',graphic)
第一层打印 三角形
#在各自的命名空间中同名变量不受影响
匿名函数
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数
语法为 lambda [arg1 [,arg2,.....argn]]:expression ,以变量的方式调用 sum = lambda arg1, arg2: arg1 + arg2
装饰器
装饰器的作用:在原先代码不改变的情况扩展功能
def test(f):
def inner():
print('hello')
f()
return inner # 返回内部函数对象,内部不调用,这种现象称为‘‘闭包’’ @test
def log():
print('world') # @test 相当于执行 log= test(log) log() # 现在的log()相当于inner()
--------------------
hello
world
装饰器的参数传递
def test(f):
def inner(*arg):
print('hello')
f(*arg) #此处f(*arg)是原先login函数的调用
return inner @test
def login(x=None):
if x == 'xing':
print('world') login() #不传参数,因为inner函数是可选参数,f(*arg)则中则为默认参数x = None
---------------
# hello
--------------
login('xing')
---------------
# hello
# world
递归函数
递归函数需设停止递归的条件
递归代码还有代码的话,递归结束后还会依次执行
def calc(n):
print(n )
n = int(n /2) #
if n > 0:
calc(n) #
print(n)
生成器
a = [x for x in range(10)]
b = (x for x in range(10))
print(a)
print(b)
-------------------
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# <generator object <genexpr> at 0x00505070>
生成器函数
使用yield关键字
def g_test():
while True:
print('hello')
n = yield 5 # yield是暂停并return 5
print(n) g = g_test() # 必选先执行赋值变量操作
g.__next__() # 刚建立的生成器必须先执行此步
print(g.__next__())
g.send('world') # send方法可发送值给n
------------------------
hello None # 执行完第一个__next__(),n并未赋值,print(n)为None
hello
5 # yield 5 返回了5 ,print()出来了 world
hello
python基础(十)--函数进阶的更多相关文章
- 周末班:Python基础之函数进阶
迭代器和生成器 迭代和可迭代 什么是迭代(iteration)? 如果给定一个list或tuple,我们要想访问其中的某个元素,我们可以通过下标来,如果我们想要访问所有的元素,那我们可以用for循环来 ...
- Python全栈开发之路 【第五篇】:Python基础之函数进阶(装饰器、生成器&迭代器)
本节内容 一.名称空间 又名name space,就是存放名字的地方.举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方. 名称空间共3种,分别如下 ...
- python基础之函数进阶之函数作为返回值/装饰器
因为装饰器需要用到返回函数的知识,所以在这里将返回函数和装饰器合并讲解. 什么是返回函数? 我们知道,一个函数中return可以返回一个或者多个值,但其实,return不仅可以返回值,还可以返回函数. ...
- python基础之函数进阶
假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print(bi ...
- 十三. Python基础(13)--生成器进阶
十三. Python基础(13)--生成器进阶 1 ● send()方法 generator.send(value) Resumes the execution, and "sends&qu ...
- python基础篇之进阶
python基础篇之进阶 参考博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html python种类 1. cpython 使用c解释器生产 ...
- python基础——匿名函数
python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...
- python基础——返回函数
python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...
- python基础——sorted()函数
python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...
- python基础——filter函数
python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...
随机推荐
- python 监听键盘事件
#coding=utf- from tkinter import * root=Tk() def callback(event): print("点击键盘",repr(event. ...
- spring相关知识点易错
1.spring不支持静态变量注入,即不能再static变量上面加@Resoure 要是想注入的话就用set方法注入 private static ComboPooledDataSource pool ...
- 微信小程序之简单记账本开发记录(二)
1.打开开发者工具 2.从微信公众平台上获取到appid,或者使用测试号. 项目的大致目录如下: 一个小程序主体部分由三个文件组成,必须放在项目的根目录中 以app为开头的文件名用来布置作用于整个项目 ...
- python中使用requests模块的post()函数时形参 data和json的区别
通常,你想要发送一些编码为表单形式的数据--非常像一个 HTML 表单.要实现这个,只需简单地传递一个字典给 data 参数.你的数据字典在发出请求时会自动编码为表单形式: >>> ...
- oracle OPEN FOR [USING] 语句
目的: 和ref cursor配合使用, 可以将游标变量分配给不同的SQL (而不是在declare中把游标给定死), 增加处理游标的灵活性语法: declare type type_c ...
- 五一 DAY 4
DAY 4 2019.5.1 PART 1 进制转化 10 = 23+21= 1010(2) = 32+30= 101(3) 进制转化常见问题: 1.十进制数 x ----&g ...
- <JavaScript>谈谈javascript语法里一些难点问题(一)
1) 引子 前不久我建立的技术群里一位MM问了一个这样的问题,她贴出的代码如下所示: var a = 1; function hehe() { window.alert(a); var a = ...
- java android 将小数度数转换为度分秒格式
/** * 将小数度数转换为度分秒格式 * @param numStr (主要用于图片中存储经纬度) * @return */ public static String convertToSexage ...
- 一百三十:CMS系统之七牛js和python的SDK使用示例
1.安装: pip install qiniu 2.编写获取uptoken的接口 @app.route('/uptoken/')def uptoken(): access_key = '' secre ...
- Python查询Mysql时返回字典结构的代码
Python查询Mysql时返回字典结构的代码 MySQLdb默认查询结果都是返回tuple,输出时候不是很方便,必须按照0,1这样读取,无意中在网上找到简单的修改方法,就是传递一个cursors.D ...