嵌套函数

>>> 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基础(十)--函数进阶的更多相关文章

  1. 周末班:Python基础之函数进阶

    迭代器和生成器 迭代和可迭代 什么是迭代(iteration)? 如果给定一个list或tuple,我们要想访问其中的某个元素,我们可以通过下标来,如果我们想要访问所有的元素,那我们可以用for循环来 ...

  2. Python全栈开发之路 【第五篇】:Python基础之函数进阶(装饰器、生成器&迭代器)

    本节内容 一.名称空间 又名name space,就是存放名字的地方.举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方. 名称空间共3种,分别如下 ...

  3. python基础之函数进阶之函数作为返回值/装饰器

    因为装饰器需要用到返回函数的知识,所以在这里将返回函数和装饰器合并讲解. 什么是返回函数? 我们知道,一个函数中return可以返回一个或者多个值,但其实,return不仅可以返回值,还可以返回函数. ...

  4. python基础之函数进阶

    假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print(bi ...

  5. 十三. Python基础(13)--生成器进阶

    十三. Python基础(13)--生成器进阶 1 ● send()方法 generator.send(value) Resumes the execution, and "sends&qu ...

  6. python基础篇之进阶

    python基础篇之进阶 参考博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html python种类 1. cpython  使用c解释器生产 ...

  7. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  8. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  9. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  10. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

随机推荐

  1. 2019-2020 ICPC, NERC, Northern Eurasia Finals (Unrated, Online Mirror, ICPC Rules, Teams Preferred)

    这是一场三人组队赛来的,单人带电子模板不限时单挑试一下.按照难度排序. B - Balls of Buma 题意:玩祖玛,射入任意颜色的球一个,当某段长度变长了且长度变长后>=3则这段就会消除, ...

  2. Python学习日记(八)—— 模块一(sys、os、hashlib、random、time、RE)

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  3. CF1030C

    CF1030C 题意: 给你一个数字,问能否拆分成k段,使得每一段的每一位数字相加结果相等. 解法: 考虑数位DP. 暴力按位考虑每一位是否满足条件 CODE: #include<cstdio& ...

  4. android: Android 权限管理小结

    一. 概述 感谢郭神,自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有 ...

  5. Vue生命周期钩子函数加载顺序的理解

    Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁的过程,就是生命周期 ...

  6. Node.js与VUE安装及环境配置之Windows篇

    Node.js安装及环境配置之Windows篇 https://www.cnblogs.com/zhouyu2017/p/6485265.html Node.js安装及环境配置之Windows篇htt ...

  7. <JavaScript>谈谈javascript语法里一些难点问题(一)

    1)    引子 前不久我建立的技术群里一位MM问了一个这样的问题,她贴出的代码如下所示: var a = 1; function hehe() { window.alert(a); var a = ...

  8. 使用es6一句话去重

    let arr = [1,2,3,4,5,1,2,3] let arr2 = Array.from(new Set(arr)) console.log(arr2) //[1,2,3,4,5]

  9. ASP.NET 5系列教程

    http://www.cnblogs.com/powertoolsteam/p/ASP_NET5_HelloWorld.html

  10. git clone https://chromium.googlesource.com/失败

    一.现象     连接着vpn,网页上可以直接打开网站,但是使用terminal 执行git clone https://chromium.googlesource.com/xxxx时,     报错 ...