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. sql server 2008 sql prompt 自动提示

    sql server 2008 在编写SQL脚本的时候,总是希望能提示一些信息,或者自动提示需要查询的表的名字,或者表的基本信息,sql server默认会有一些提示的,如果没有可以设置工具--> ...

  2. 分布式架构设计(一) --- 面向服务的体系架构 SOA

    1.1 基于TCP协议的RPC 1.1.1 RPC名词解释 RPC的全称是Remote Process Call,即远程过程调用,RPC的实现包括客户端和服务端,即服务调用方和服务提供方.服务调用方发 ...

  3. webpack深入场景——开发环境和生产环境配置

    以前自己写一小项目时,webpack的配置基本就是一套配置,没有考虑生产环境和开发环境的区分,最近在做一个复杂的商城项目接触到了webpack的高级配置,经过两天的研究,写出了一份目前来说比叫满意的配 ...

  4. NancyFX 第十二章 通道截拦

    所有的好的Web框架都有一套好的通道截拦的机制,Nancy在我看来是处理最好的.那什么是请求通道那?下面的图可能说的比较清楚些: 正如名称中描述的,一个典型的Web请求在到达最终响应前会穿过一定数量的 ...

  5. java 多态 ---父类调用子类方法

    package test1;//多态的体现import javax.print.attribute.standard.RequestingUserName;import java.util.Scann ...

  6. 夹缝中求生存-在一无所有的php虚拟主机环境下利用smtp发送邮件(二)

    夹缝中求生存 前言:在上一篇随笔中,以163个人邮箱作为发送邮箱地址,当收件邮箱为QQ邮箱时,极有可能会被直接扔进邮件垃圾箱里,为了解决这个问题,申请注册企业邮箱,可以减少发出的邮件被当作垃圾邮件的可 ...

  7. Java最大公约数和最小公倍数的求法(辗转相除法)

    这道题计算了三个数的最小公倍数 import java.util.Scanner; public class D { public static int gcd(int a,int b) { int ...

  8. 机器学习之类别不平衡问题 (2) —— ROC和PR曲线

    机器学习之类别不平衡问题 (1) -- 各种评估指标 机器学习之类别不平衡问题 (2) -- ROC和PR曲线 完整代码 ROC曲线和PR(Precision - Recall)曲线皆为类别不平衡问题 ...

  9. 深度揭秘腾讯云TSF日调用量超万亿次背后技术架构

    腾讯云TSF是整合外部开源框架和腾讯内部历经多年锤炼的PaaS平台打造而成的企业级分布式应用服务开发与托管平台,本文重点对TSF中负责服务托管的PaaS平台进行揭秘,从技术角度解析TSF 平台是如何每 ...

  10. 线程实现ServerSocket和Socket实现数据交互

    定义一个MyServer类 import java.io.IOException;import java.net.ServerSocket; public class MyServer { publi ...