函数 / 命名空间 / 闭包

三元运算符

def my_max(a,b):
    return a if a>b else b     #当a>b成立返回a,否则返回b

参数:

实参 : 1.位置参数 2. 关键字参数 3. 混合参数

形参 : 1.位置参数 2. 默认值参数

动态传参:

1. 动态接收位置参数

def func(a, b, *arg):    #动态接受参数是:动态参数必须在位置参数之后
    pass     

2.接收默认值参数

def fruit(a, b, c=‘apple‘, *food):
    pass

三种参数顺序 : 位置参数, 动态参数*, 默认值参数

3.动态接受关键词参数

def func(**kwargs):
    pass
func(a=1, b=2, c=3)
func(a=1, b=2) 

最终顺序(*):    位置参数 >  *args > 默认值参数 > **kwargs

命名空间(存储变量)

分类

1.全局命名空间  → 直接在py文件中,函数外声明的变量都属于全局命名空间

2.局部命名空间  → 在函数中声明的变量会放在局部命名空间

3.内置命名空间  → 存放python解释器为我们提供的名字,list,tuple,str,int这些都是内置命名空间

取值顺序:

  1.局部命名空间

  2.全局命名空间

  3.内置命名空间

作用域(作用范围)

分类

1.全局作用域 : 全局命名空间 + 内置命名空间

2.局部作用域 : 局部命名空间

globals()   # 打印全局作用域中的内容

locals()    #打印局部作用域中的内容

global 和 nonlocal

global表示不再使用局部作用域的内容,而改用全局作用域中的变量

a = 100
def func():
    global a    #可以修改全局变量a,仅限当前函数使用
    a = 28
    print(a) 

func()
print(a)    # ===>>28   28

nonlocal表示在局部作用域中,调用父级命名空间的变量

函数名的运用

1.函数名的内存地址 print(func)   ==>   <function func at 0x1101e4ea0>

2.函数名可以赋值给其他变量

3.函数名可以当做容器类的元素

4.函数名可以当做函数的参数

5.函数名可以作为函数的返回值

闭包 内层函数,对外层函数(非全局)的变量的引用

def outer():
    name = "Amy"
    # 内部函数
    def inner():
        print(name)
    return inner   #外部函调用内部函数

fn = outer()   # 访问外部函数, 获取到内部函数的函数地址
fn()    

闭包好处: 在外界可以访问内部函数; 内部函数访问了外层函数的变量.这个变量将会常驻内存,供后面的程序使用

from urllib.request import urlopen
def web_content():
    content = urlopen(‘https://tieba.baidu.com/‘).read().decode("utf-8")
    def get_content():
        return content     #储存content的内容,方便后续使用
    return get_content

fn = web_content()
content = fn()
print(content)

原文地址:https://www.cnblogs.com/gracenana/p/10197826.html

时间: 2024-10-31 22:22:57

函数 / 命名空间 / 闭包的相关文章

JavaScript中的匿名函数及函数的闭包以及作用域

1. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85

JavaScript 闭包系列二 --- 匿名函数及函数的闭包

一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) {    return 2*x;} 2)Function构造函数,把参数列表和函数体都作为字符串,不方便,不建议使用 var double = new Function('x', 'return 2*x;'); 3)函数表达式方式 var double = function(x) {    return 2*x;} 该形式中,等号右边是一个匿名函数,创建函数完毕后,将该函数赋给了变量doubl

函数的闭包和装饰器

函数的闭包: #1.闭 必须是内部的函数 #2.包 引用了外部作用域中的变量 命名空间: 一共有三种命名空间从大范围到小范围的顺序:内置命名空间.全局命名空间.局部命名空间 作用域(包括函数的作用域链): 小范围的可以用大范围的但是大范围的不能用小范围的范围从大到小(图) 在小范围内,如果要用一个变量,是当前这个小范围有的,就用自己的如果在小范围内没有,就用上一级的,上一级没有就用上上一级的,以此类推.如果都没有,报错 函数的嵌套: 嵌套调用 嵌套定义:定义在内部的函数无法直接在全局被调用 函数

13、python中的函数(闭包与装饰器)

一.嵌套函数 函数的内部又再定义另一个函数,这个函数就叫嵌套函数,里面含函数就叫内部函数. 示例: 二.返回函数 函数可以接收函数对象作为参数,同理函数也能返回一个函数对象作为返回值. 示例: 返回函数可以用来延迟函数的执行. 三.命名空间与变量作用域 变量作用域指的是变量的存活的范围.命名空间指的是属于一个对象的所有属性(对象)的集合. 示例: A的命名空间是A函数对象里面的所有对象的集合,包括变量a.函数B.变量b:B的命名空间就是属于函数B的所有对象的集合,包括变量b: a的变量作用域就是

python之函数名,闭包、迭代器

一.函数名的运用(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1,函数名的内存地址: def func(): print("呵呵") print(func) # 结果为:<function func at 0x00000000029299D8> 打印出func的内存地址 2,函数名可以赋值给其他变量: def func(): print("呵呵") a = func # 把函数当成一个变量赋值给另一个变量 a()

14.匿名函数和闭包

匿名函数和闭包 学习要点:1.匿名函数2.闭包 匿名函数就是没有名字的函数,闭包是可以访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础. 一.匿名函数 //普通函数function box(){ //函数名是box return 'Lee'; } //匿名函数function(){ //匿名函数,会报错,单独的匿名函数是无法运行的 return 'Lee';} //通过表达式自我执行(function box(){ //封装成表达式 alert('Lee');})(

匿名函数和闭包

匿名函数和闭包匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.一. 匿名函数//普通函数functionbox() { //函数名是 boxreturn'Lee';}//匿名函数function() { //匿名函数,会报错return'Lee';}//通过表达式自我执行(function box() { //封装成表达式alert('Lee');})(); //()表示执行函数,并且传参//把匿名函数赋值给变量var box = function() { //将匿名函数赋给

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰器 1.1什么是高阶函数? 1.1.1函数接收的参数,包涵一个函数名. 1.1.2 函数的返回值是一个函数名. 其实这两个条件都很好满足,下面就是一个高阶函数的例子. def test1(): print "hamasaki ayumi" def test2(func): return t

Swift函数和闭包

函数 Swift 使用func关键字声明函数: 1 func greet (name: String, day: String) -> String { 2 return "Hello \(name), today is \(day)." 3 } 4 greet ("Bob", "Tuesday") 通过元组(Tuple)返回多个值: 1 func getGasPrices () -> (Double, Double, Double)