函数总结

  1. # 函数的定义:
    def func(a, b):
       print(a, b)
       return a + b


    # 函数四个组成部分
    # 函数名:调用函数的依据,必须的
    # 函数体:执行函数逻辑的,必须的
    # 参数列表:为函数内部提供资源,非必须的
    # 返回值:将函数执行结果返回给外界,(非必须的)

    # 返回值:空返回(没有return|空return) | 一值返回 | 多值返回:装有多个值的元组

    # 参数列表:
    # 实参:外界调用函数传入的参数,拥有实际值
    # 形参:函数定义时,()中定义用来接受实参的值

    # 参数重点一:形参是对实参的值拷贝 *****
    ls = [1, 2, 3, 4, 5]
    num = 10


    def fn(arg, n):
       arg[2] = 300
       print('1:', arg[2])
       print(id(n))
       n = 100
       print(id(n))


    fn(ls, num)
    # arg是对ls的值拷贝
    print('2:', ls[2])
    print(id(num))


    # 实参的分类
    # 位置实参:按位置对应传递参数,必须出现在关键字实参之前
    # 关键字实参:不需要按位置对应传参,用参数名标注为谁传参,必须出现在位置实参之后

    # 参数重点二:先位置实参后关键字实参传参

    # 参数重点三:
    # 位置实参:只能给位置形参传参(位置形参|默认形参|可变长位置形参)
    # 关键字实参:可以给任意形参传参

    # 出现顺序
    # 参数重点四:
    # 位置形参 > 默认形参 > 可变长位置形参 > 关键字形参 > 可变长关键字形参

    def fn1(a, b, c=10, *args, d, e=20, f, **kwargs):
       pass


函数对象

  1. # 函数名就是存放了函数的内存地址,存放了内存地址的变量都是对象,即 函数名 就是 函数对象

    # 函数对象的应用
    # 1 可以直接被引用 fn = cp_fn
    # 2 可以当作函数参数传递 computed(cp_fn, 100, 20)
    # 3 可以作为函数的返回值 get_cp_fn(cmd): return add
    # 4 可以作为容器类型的元素 method_map: 对应关系中的值
  1. def add(a, b):
       return a + b
    def low(a, b):
       return a - b
    def jump(a, b):
       return a * b
    def full(a, b):
       return a / b
    def quyu(a, b):
       return a % b
    def computed(fn, n1, n2):
       res = fn(n1, n2)
       return res
    method_map = {
       'add': add,
       'low': low,
       'jump': jump,
       'full': full,
       'quyu': quyu,
    }
    # 根据指令获取计算方法
    def get_cp_fn(cmd):
       if cmd in method_map:
           return method_map[cmd]
       return add  # 输入有误用默认方法处理


    while True:
       cmd = input('cmd: ')
       if cmd == 'quit':
           break
       cp_fn = get_cp_fn(cmd)
       result = computed(cp_fn, 100, 20)
       print(result)

名称空间

  1. # 名称空间:存放名字与内存空间地址对应关系的容器
    # 作用:解决由于名字有限,导致名字重复发送冲突的问题

    # 三种名称空间
    # Built-in:内置名称空间;系统级,一个;随解释器执行而产生,解释器停止而销毁
    # Global:全局名称空间;文件级,多个;随所属文件加载而产生,文件运行完毕而销毁
    # Local:局部名称空间;函数级,多个;随所属函数执行而产生,函数执行完毕而销毁

    # 注:
    # del 名字:可以移除查找最近的名字与内存空间地址的对应关系
    # 加载顺序:Built-in > Global > Local

global关键词

  1. def fn()
    global num
       num = 20
       print(num)
    # global关键词可以将Local的名字提升为Global的名字
    # 一个文件中的Global名字就是一个,所以函数内部外部使用的名字都是一个
    fn()  # 注:一定要调用函数,才能产生名字,并提升
    print(num)

函数的嵌套定义

  1. # 将函数直接定义到另一个函数内部,就可以使用外部函数的中的名字
    def outer():
       num = 20
       def inner():
           print(num)  # inner就可以直接使用outer中的名字
       inner()
    outer()

作用域

  1. # 作用域:名字起作用的范围
    # 作用:解决同名字可以共存问题

    # 四种作用域
    # Built-in:内置作用域,所有文件所有函数
    # Global:全局作用域,当前文件所有函数
    # Enclosing:嵌套作用域,当前函数与当前函数的内部函数
    # Local:局部作用域,当前函数

    # 注:
    # 不同作用域之间名字不冲突,以达到名字的重用
    # 查找顺序:Local > Enclosing > Global > Built-in
  1. len = 10
    def outer():
       len = 20  # 外层函数的局部变量:Enclosing - 嵌套作用域
       def inner():
           len = 30
           print('1:', len)  # 30, inner -> outer -> global -> built-in
       inner()
       print('2:', len)  # 20, outer -> global -> built-in
    outer()
    print('3:', len)  # 10, global -> built-in

    del len
    print('4:', len)  # len地址, built-in

闭包

  1. # closure:被包裹的函数,称之为闭包
    # 完整的闭包结构:1.将函数进行闭包处理;2.提升函数名的作用域,将内部函数对象作为外部函数的返回值

    def outer(url):
       def get_html():
           html = requests.get(url)
           print(html.text)
       return get_html
    # 先预定义多个爬虫方法,爬页面操作并未执行
    baidu = outer('https://www.baidu.com')
    python = outer('https://www.python.org')
    sina = outer('https://www.sina.com.cn')
    # 什么时候想爬什么页面就调用指定页面的爬虫方法
    baidu()
    sina()
    baidu()

Day 11 函数对象,函数嵌套,作用域,闭包的更多相关文章

  1. 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  2. 周末学习笔记——day01(函数,函数对象,嵌套调用,名称空间,作用域,闭包,装饰器)

    一,复习 字符编码 文件头:py2—ASCII,py3—UTF-8 三种字符串:u' ' b ' ' r ' ' u' ' .endcode(' utf-8 ') b' '.deconde(' utf ...

  3. Python 函数对象-函数嵌套-名称空间与作用域-闭包函数

    今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...

  4. python函数:函数参数、对象、嵌套、闭包与名称空间、作用域

    今天的内容整理共有5部分 一.命名关键字参数 二.函数对象 三.函数的嵌套 四.名称空间与作用域 五.闭包函数 一.命名关键字参数 # 命名关键字参数: 在定义函数时,*与**之间参数称之为命名关键字 ...

  5. 函数嵌套>作用域>闭包函数

    一:函数对象 函数是第一类对象,即表示函数可以当做数据传递 可以被引用:把函数内存地址赋值给一个变量名,仍然遵循函数的调用规则. 可以被当做参数传递:传递的是函数的运行的结果#可以当做返回值 把函数作 ...

  6. python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套

     复习   1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用:     # 字符串的比较#  -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...

  7. day11函数的参数,函数对象 - 函数名,函数的嵌套调用

    复习 # 什么是函数:具体特定功能的代码块 - 特定功能代码块作为一个整体,并给该整体命名,就是函数 # 函数的优点: # 1.减少代码的冗余 # 2.结构清晰,可读性强 # 3.具有复用性,开发效率 ...

  8. 10 - 函数嵌套-作用域-闭包-LEGB-函数销毁

    目录 1 函数嵌套 2 作用域 2.1 global关键字 3 闭包 3.1 nonlocal关键字 4 默认值的作用域 5 变量名解析原则LEGB 6 函数的销毁 1 函数嵌套         一个 ...

  9. python基础之函数对象,嵌套,名称空间和作用域

    函数对象: 函数是第一类对象的含义是函数可以被当作数据处理 函数可用于: def func(): print(‘func’) 1.引用  f = func  把内存地址赋值给f 2.当作参数传给一个函 ...

  10. Day04:函数参数、对象、嵌套、闭包函数和装饰器

    上节课复习:    1.什么是函数        函数就是具备某一功能的工具    2.为何用函数        1.程序的组织结构和可读性        2.减少代码冗余        3.扩展性强 ...

随机推荐

  1. nodejs web API 相关杂项

    场景是这样的: docker-compose中起多个服务,其中有一个是nodejs写的作为web API. 这个API 的使用者有2类: 1 docker-compose网络内其他特定服务访问,作为C ...

  2. android --------- 嵌套unity出现 your hardware does not support this application,sorry!

    最近遇见一个这个的问题 ,我在Android端接入Unity3D时出现的问题 问题是打开app直接弹出下面的弹框 点击ok 就退出了 遇到这样的问题 是因为libs文件夹的so文件出现了问题: 解决办 ...

  3. 在虚拟环境下运行 Confluence 6

    这个页面针对运行在虚拟硬件环境下的 Confluence 提供一些信息. 概要 在虚拟环境(virtual machine (VM))下运行 Confluence 需要一些特定的技能来进行设定和进行管 ...

  4. 依赖注入demo

    让我们看一个例子: class UserProvider{ protected $connection; public function __construct(){ $this->connec ...

  5. 填写数独 洛谷P1784

    题目链接:https://www.luogu.org/problemnew/show/P1784 因为要求行列以及每9个数字组成的中格子都得有1-9这9个数,我们不妨建三个二维数组 第一维代表是第几个 ...

  6. Github如何创建|删除仓库

    一.创建 1.1.点击官网(https://github.com/),注册并登陆后点击Start a project或者点击网页右上角的加号选择New repository 1.2.网址自动变更为ht ...

  7. day72 关于rbac组件的小部分面试题

    rbac的权限组件   基于角色的权限控制 1.什么是权限? url代表的就是一个权限 2.如何实现权限的控制? 表结构  以我们讲的课的内容为例 菜单表: - title 标题 - icon 图标 ...

  8. 【Java集合系列二】LinkedList解析

    一.简介 1.LinkedList继承关系 2.LinkedList底层实现 LinkedList使用双向链表存储数据,所以没有默认的容量,也不会有扩容一说.只有两个指针,永远指向链表的两端:firs ...

  9. postman操作练习用例

    1.注册用户:http://api.nnzhp.cn/api/user/user_reg 2.登录用户:http://api.nnzhp.cn/api/user/login 3.添加学生:http:/ ...

  10. BiLstm原理

    Lstm这里就不说了,直接说Bilstm. 前向的LSTM与后向的LSTM结合成BiLSTM.比如,我们对“我爱中国”这句话进行编码,模型如图所示. 前向的依次输入“我”,“爱”,“中国”得到三个向量 ...