1.命名关键字参数

  格式:在*后面的参数都是命名关键字参数

  特点:

    1.必须被传值

    2.约束函数的调用者必须按照key=value的形式传值

    3.约束函数的调用者必须用我们指定的key名

 def auth(*args,**kwargs):
"""
使用方式auth(name="egon",pwd="123")
:param args:
:param kwargs:
:return:
"""
# print(args,kwargs)
if len(args) !=0:
print('必须用关键字的形式传参')
return
if 'name' not in kwargs:
print('必须用指定的key名name')
return
if 'pwd' not in kwargs:
print('必须用指定的key名pwd')
return name=kwargs['name']
pwd=kwargs['pwd']
print(name,pwd)

2.函数嵌套

  1.函数的嵌套调用:在函数内又调用了其他函数

  

def max(x,y):
if x>y:
reryrn x
else:
return y
def max3(x,y,z):
res1 = max2(x,y)
res2 = max2(rea1,z)
return res2
print(max3(11,199,2))

  2,函数的嵌套定义:在函数内又定义了其他函数

def func1():
print('from func1')
def func2(): #func2=内存地址
print('from func2') func1()
def f1():
print('f1')
def f2():
print('f2')
def f3():
print('f3')
f3()
f2()
f1() '''
f1
f2
f3
'''

3.名称空间和作用域

  1.名称空间:存放名字和值绑定关系的地方

  1.2.名称空间分类: 

    1.2.1内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效

    1.2.2全局名称空间:文件级别的名字,在执行文件的时候生效,在文件结束或者在文件删除的时候失效

    1.2.3局部名称空间:存放函数内定义的名字(函数的参数以及函数内名字都存放在局部变量空间)---在函数调用时临时生效,函数结束则失效

    加载顺序:内置名称空间-----全局名称空间---局部名称空间

      查找名字:局部名称空间-----全局名称空间-----内置名称空间

  2:作用域

  1.全局变量域:包含的是内置名称空间与全局名称空间的名字

  特点:

      在任何位置都能访问到

      该范围内的名字会伴随程序整个生命周期

  2.局部作用域:包含的是局部名称空间的名字

   特点:

       只能在函数内使用

      调用函数是生效,调用结束失效

4,函数对象

  1,函数可以被引用

def bar():
print('from bar') f =bar
f()

  2,可以当作参数传入

 

def bar():
print(’from bar‘) def wrapper(func):
func()
wrapper(bar)

  3,可以当作函数的返回值

def bar():
print(’from bar‘)
def foo(func):
return func f = foo(bar)
f()

  4,可以当作容器类型的元素

def get():
print('from get') def put():
print('from put') l=[get,put] print(l) l[0]()
def auth():
print('登陆。。。。。') def reigster():
print('注册。。。。。') def search():
print('查看。。。。') def transfer():
print('转账。。。。') def pay():
print('支付。。。。') dic={
'':auth,
'':reigster,
'':search,
'':transfer,
'':pay
} def interactive():
while True:
print("""
1 认证
2 注册
3 查看
4 转账
5 支付
""")
choice=input('>>: ').strip()
if choice in dic:
dic[choice]()
else:
print('非法操作') interactive()

5,闭包函数

  定义在函数内部的函数,并且该函数包含对外部函数作用域中名字的引用,该函数就成为闭包函数

 def outter():
name='egon'
def inner():
print('my name is %s' %name) return inner inner()被称为闭包函数。
inner()定义在函数outter外部,outter函数的作用域内部变量name,在inner内被引用

python之路--day10-闭包函数的更多相关文章

  1. Python之路,Day10 - 异步IO\数据库\队列\缓存

    Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...

  2. Python之旅Day4 闭包函数 模块及模块倒入

    闭包函数 闭包函数就是在内部函数当中有对外部函数名字的引用 ###代码示例1### def f1(): x =1 def f2(): print(x) return f2 f=f1() f() ### ...

  3. python之路——装饰器函数

    阅读目录 楔子 装饰器的形成过程 开放封闭原则 谈装饰器主要功能和装饰器固定结构 带参数的装饰器 多个装饰器装饰一个函数 返回顶部 楔子 作为一个会写函数的python开发,我们从今天开始要去公司上班 ...

  4. 【python之路20】函数作为参数

    1.函数可以作为参数 1)函数名相当于变量指向函数 2)函数名后面加括号表示调用函数 #!usr/bin/env python # -*- coding:utf-8 -*- def f1(args): ...

  5. python之路---装饰器函数

    阅读目录 楔子 装饰器的形成过程 开放封闭原则 谈装饰器主要功能和装饰器固定结构 带参数的装饰器 多个装饰器装饰一个函数 返回顶部 楔子 作为一个会写函数的python开发,我们从今天开始要去公司上班 ...

  6. Python 空间名称与闭包函数

    空间名称与闭包函数 名称空间 名称空间 namespaces:存放名字的地方,是对栈区的划分 名称空间在栈区中分为三种,详细的划分不同的空间,不同空间可以存放相同名字的名字 内置名称空间 存放的名字: ...

  7. python之路--第一类对象,函数名,变量名

    一 . 第一类对象 函数对象可以像变量一样进行赋值 , 还可以作为列表的元素进行使用 可以作为返回值返回 , 可以作为参数进行传递 def func(): def people(): print('金 ...

  8. python之路——内置函数和匿名函数

    阅读目录 楔子 内置函数 匿名函数 本章小结 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们 ...

  9. python基础语法7 闭包函数与装饰器

    闭包函数: 1.闭包函数必须在函数内部定义 2.闭包函数可以引用外层函数的名字 闭包函数是 函数嵌套.函数对象.名称空间与作用域 结合体. # 直接传参 def func(x): print(x) f ...

随机推荐

  1. Linux系统中svn服务器设置开机启动

    安装完svn服务器后虽然好用但是因为经常重启Linux服务器,每次重启完就要去手动启动svn服务器,很是麻烦,于是在网上找了一些方法后,自己把svn服务器设置成开机启动 步骤一:安装svn服务器: h ...

  2. C# 委托Delegate的使用 笔记

    使用delegate总是一头雾水,记录一下笔记,备忘. 主要用于线程间操作UI上的控件,以便使用.或者是大家统一操作入口使用. using System.Windows.Forms; namespac ...

  3. 登录界面输入判断为空的bug

    这个bug我改了两天啊两天,直到大神帮我debug了一下... 这是之前出错的部分.. <script type="text/javascript" language=&qu ...

  4. UWP 使用Telerik Grid控件

    还是老规矩,看一下最终效果. 数据是从SQLite中读取,然后绑定到DataGrid中显示的. 先看一下XAML <grid:RadDataGrid Grid.Row="1" ...

  5. 搭建maven

    1. 下载安装包 打开网址https://maven.apache.org/download.cgi,找到下面这个文件进行下载 2. 解压安装 解压刚下载地文件到自己想要得目录下 3. 配置环境变量 ...

  6. bzoj3142 luogu3228 HNOI2013 数列

    这题好没意思啊,怀疑拉不开区分度. 题意:求一个递增序列,每两个相邻数字之间的差值不超过m,最后一个值不能大于n. 分析:网上好多人用了差分,我没想到.然后YY了一发生成函数. 考虑构造生成函数G(x ...

  7. WordPress禁止版本修订历史、自动保存和自动草稿最新方法汇总

    提醒:我这里汇总的方法有一些只支持以前老版本的WordPress,对于新版本的WordPress,有些功能是不支持的,所以操作前请做好备份.我的WordPress版本目前是4.3.1,我会在我测试有效 ...

  8. JavaScript:方法&对象大全

    方法 方法的原型链 <html> <head> <title></title> </head> <script type=" ...

  9. Hashtable源码解析(JDK1.8)

    package java.util; import java.io.*; import java.util.concurrent.ThreadLocalRandom; import java.util ...

  10. 关于Maven的配置与学习

    1. 简介 官方说法:Apache Maven is a software project management and comprehension tool. Based on the concep ...