嵌套函数

>>> 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. Linux 修改文件夹的用户组权限

    将ubsadm文件夹所属用户修改为userschown -R ubsadm:users /home/ubsadm 此命令将用户123的用户组改为rootusermod -g 123 root

  2. jQuery源代码学习之十——动画Animate

    一.Animate模块的代码结构 // 定义了一些变量 tweeners = {}; function createFxNow() {} function createTween() {} funct ...

  3. hystrix(一) 简单使用, 以及动态配置更新

    本文转载自https://my.oschina.net/u/1169457/blog/1787414 hystrix 简单使用, 以及动态配置更新 概述 只介绍同步模式下简单的使用, 有助于快速接入, ...

  4. java课后实验性问题4

    课后作业一: 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象? 设计思路:定义类的构造函数时使静态变量i进行i++,即每构 ...

  5. Linux 操作memcache命令行

    telnet 127.0.0.1 11211 连接 memcache stats 查看 memcache 状态 状态说明: pid memcache服务器的进程ID uptime 服务器已经运行的秒数 ...

  6. How to Publish a NuGet Package

    How to Publish a NuGet Package Command line To push packages to nuget.org you must use nuget.exe v4. ...

  7. Programming a Hearthstone agent using Monte Carlo Tree Search(chapter one)

    Markus Heikki AnderssonHåkon HelgesenHesselberg Master of Science in Computer Science Submission dat ...

  8. Mac 平台安装MySQL

    Mac 平台安装MySQL   一.下载MySQL MySQL官网上https://dev.mysql.com/downloads/mysql/,下载Community Server版 出现如下界面, ...

  9. pymysql检查是否断开, 断开重连

    python mysql使用持久链接 python链接mysql中没有长链接的概念,但我们可以利用mysql的ping机制,来实现长链接功能~ 思路: 1 python mysql 的cping 函数 ...

  10. python select模块

    Python select 一.前言 Python的select()方法直接调用操作系统的IO接口,它监控sockets,open files, and pipes(所有带fileno()方法的文件句 ...