Python全栈之路Day19

初次编辑2017年10月25日,星期三

摘要
一. 上节课复习
二. 名称空间和作用域
三. 函数的嵌套及静态作用域
四.函数是第一类对象的概念
五.闭包
作业
今日总结

摘要

引用:Alex

  1. 名称空间和作用域
  2. 函数嵌套及静态嵌套域
  3. 函数对象与闭包

一. 上节课复习

  1. 为何要使用函数

    1. 解决代码重用问题
    2. 统一维护
    3. 程序的组织结构清晰,可读性强
  2. 定义函数
    1. !!!先定义后使用

      def funcname(arg1,arg2,….) #funcname = 函数体

      ‘‘‘描述信息‘‘‘

      函数体

      return value

    2. 定义无参函数

      定义有参函数

      定义空函数

  3. 调用函数
    1. 语句形式:foo()
    2. 表达式形式:foo(1,2)
    3. 函数调用作为另外一个函数的参数:print(foo(1,2))
  4. 函数返回值
    1. 不写return--->None
    2. return 一个值--->这个值
    3. return 多个值--->由这多个值组成的元组
  5. 函数的参数
    1. 形参
    2. 实参数
    3. 从实参的角度:
      • 按位置传值 foo(1,2)
      • 按关键字传值 foo(y=1,x=2)
      • 混合传值 foo(1,y=2)
    4. 从形参角度:
      • 位置参数 def foo(x,y,z)
      • 默认参数 def foo(x,y=1)
      • 什么时候用:
        • 在调用函数时,每次调用传入的值都在变化,使用位置参数,变化较小使用默认参数
      • 二者的位置排列:
        • 位置参数必须在默认参数的左边
      • 二者的特性:
        • 位置参数 必须传值,默认参数可传可不传
      1. *args: def foo (x,*args)

        foo(1,2,3,4,5)

        ** kwargs: def foo (x,**kwargs)

        foo(1,y=2,z=3)

二. 名称空间和作用域

  1. 名称空间

    1. 内置名称空间
    2. 全局名称空间
    3. 局部名称空间
  2. 作用域
    1. 全局作用域
    2. 局部作用域
  3. 名称空间的查询
    1. globals:查询全局名称空间的名字
    2. locals:查询局部名称空间的名字

三. 函数的嵌套及静态作用域

  1. 嵌套调用
  2. 嵌套定义 !!!函数嵌套时的执行顺序
def f1():
    x = 1
    print(‘----->f1 ‘,x)
    def f2():
        x = 2
        print(‘---->f2 ‘,x)
        def f3():
            x = 3
            print(‘--->f3 ‘,x)
        f3()
    f2()
f1()        >>>----->f1  1;---->f2  2;--->f3  3

四.函数是第一类对象的概念

  1. 函数可以被赋值
def foo():
    print(‘foo‘)

print(foo)

f = foo
print(f)
  1. 把函数当成参数传递
def foo():
    print(‘foo‘)

def bar(func):        >>><function foo at 0x00000000003E3F28>;foo
    print(func)
    func()

bar(foo)
  1. 把函数当成返回值
def foo():
    print(‘foo‘)

def bar(func):
    print(func)
    return func

f = bar(foo)
print(f)
  1. 把函数当成容器类型的元素去用
def add():
    print(‘==========function add‘)

def    delete():
    print(‘==========function delete‘)

def search():
    print(‘==========function search‘)
def change():
    print(‘==========function change‘)

def tell_msg():
    msg = ‘‘‘
    delete:删除
    add:添加
    search:查询
    change:更改
    ‘‘‘
    print(msg)

cmd_list = {
    ‘add‘:add,
    ‘delete‘:delete,
    ‘search‘:search,
    ‘change‘:change
}

while True:
    tell_msg()
    choice = input(‘please input your choice: ‘).strip()
    cmd_list[choice]()

五.闭包

  1. 闭包函数概念:

    • 首先是内部定义的函数,该函数对外部作用域而不是全局作用域名字的引用
x =1

def f1():
    x = 1000
    def f2():
        print(x)
    return f2

f = f1()
f()
print(f.__closure__[0])
print(f.__closure__[0].cell_contents)

>>><1000
>>><cell at 0x0000000002177498: int object at 0x0000000001DC9EF0>
>>>1000
from urllib.request import urlopen
def f1(url):
    def f2():
        print(urlopen(url).read())
    return f2

baidu = f1(‘http://www.baidu.com‘)        #爬网页
baidu()

作业

今日总结

  1. 待整理
时间: 2024-10-14 12:52:39

Python全栈之路Day19的相关文章

Python全栈之路系列之赋值与运算符

Python全栈之路系列之赋值与运算符 在继续下面的文章之前我们先来浏览一下Python为我们提供的几种运算符,定义两个变量,分别是a和b,a的值是10,b的值是20. 算术运算符 运算符 描述 实例 + 加,两个对象相加 a+b=30 - 减,两个对象相减,可能会得到负数 a-b=-10 * 乘,两数相称或是返回一个被重复若干次的字符串 a*b=200 / 除,两个对象相除 b/a=2 % 取膜,返回除法的余数 b%a=0 ** 幂,返回x的y次幂 a**b=10000000000000000

Python全栈之路_01

Python全栈之路 前言:因为Python主要是在Linux和widows操作系统上使用所以,首先就介绍Pyhton在这两个平台上的安装和一些基础知识 Linux系统下安装Pyhton 1.工具 虚拟机:VMware workstation 12 Pro Linux系统:CentOS 64 位 VMware虚拟机安装很简单就不说明了. 在虚拟机安装CentOS 需要注意的是: 运行内存分配1G左右即可 可以开机按F2进入bios界面boot目录下选择启动设备选择Hard Drive为优先启动位

python 全栈之路

python 全栈之路 一. python 1. Python基础知识部分 Python Python那点事 Python windows和linux下 安装 Python2,Python3 Python 开启入坑之路 Python 基本数据类型 Python 那些零碎的知识点 Python -函数 Python - 面对对象 Python - 模块 Python - 文件操作 Python - python中经常踩得的坑 2. Python - 网络编程 3. Python - 并发编程 二.

Python全栈之路----常用模块----hashlib加密模块

加密算法介绍 HASH       Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值. 简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数. HASH主要用于信息安全领域中加密算法,他把一

Python全栈之路----函数----返回值

函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句,把结果返回. def stu_register(name,age,course='PY',country='CN'): print('----注册学生信息----') print('姓名:',name) print('年龄:',age) print('国籍:',country) print('课程:',course) if age > 22: return False else: return True registriat

Python全栈之路系列----之-----面向对象4接口与抽象,多继承与多态)

接口类与抽像类 在python中,并没有接口类这种东西,即便不通过专门的模块定义接口,我们也应该有一些基本的概念 编程思想 归一化设计: 1.接口类 不实现具体的方法,并且可以多继承 2.抽象类 可以做一些基础实现,并且不推荐多继承 编程的几类原则: 开放封闭原则:对扩展示开放的,对修改是封闭的依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该应该依赖细节:细节应该依赖抽象.换言之,要针对接口编程,而不是针对实现编程接口隔离原则:使用多个专门的接口,而不使用单一的总接口.

python全栈之路【四】测试 2

1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex', 'eric', 'rain'] li = ['alex', 'eric', 'rain'] v = "_".join(li) print(v) alex_eric_rain 2.查找列表中元素,移除每个元素的空格,并查找以 a 或 A 开头 并且以 c 结尾的所有元素. li = ["alec", " aric", "Alex", &quo

Python全栈之路Day1(补)

2017年9月18日 0:20:28 摘要一.计算机硬件介绍二.计算机启动流程作业今日总结 摘要 引用:东方越迁blog 因前期笔记整理较差,故重新开始整理笔记并且每日上传至blog. 一.计算机硬件介绍 概念:由一条总线把CPU.内存和I/O设备串联起来并与其他设备进行通信.CPU负责运算,内存用于储存临时变量,硬盘用于储存数据 处理器CPU(寄存器+控制器) 取指令->解码->执行,直到程序结束. 通用寄存器:用来保存变量和临时结果 程序计数器:它保存了将要取出的下一条指令的内存地址.在指

Python全栈之路系列----之-----re模块(正则表达式)

正则表达式并不是python中的一部分,正则表达式适用于处理字符串的强大工具,拥有自己独特的语法,以及独立的处理引擎.在提供了正则表达式的语言中都它的语法是都一样的 re模块本质上和正则表达式没有一毛钱的关系,re模块是python提供给我们方便操作正则的工具而已 正则表达式概念 使用单个字符串规则来描述匹配一系列符合某个句法规则的字符串 是对字符串操作的一种逻辑公式 应用场景:处理文本和数据 正则表示是过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功:否则匹配失败 正