Python全栈之路Day19

Posted 时间就是金钱 我的朋友

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈之路Day19相关的知识,希望对你有一定的参考价值。

## 一. 上节课复习 1. 为何要使用函数 1. 解决代码重用问题 2. 统一维护 3. 程序的组织结构清晰,可读性强 1. 定义函数 1. !!!先定义后使用 ```python def funcname(arg1,arg2,....) #funcname = 函数体 \'\'\'描述信息\'\'\' 函数体 return value ``` 2. 定义无参函数 定义有参函数 定义空函数 2. 调用函数 1. 语句形式:foo() 2. 表达式形式:foo(1,2) 3. 函数调用作为另外一个函数的参数:print(foo(1,2)) 3. 函数返回值 1. 不写return--->None 2. return 一个值--->这个值 3. return 多个值--->由这多个值组成的元组 4. 函数的参数 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) * 什么时候用: * 在调用函数时,每次调用传入的值都在变化,使用位置参数,变化较小使用默认参数 * 二者的位置排列: * 位置参数必须在默认参数的左边 * 二者的特性: * 位置参数 必须传值,默认参数可传可不传 5. \\*args: ```python def foo (x,\\*args) foo(1,2,3,4,5) ``` \\** kwargs: ```python def foo (x,**kwargs) foo(1,y=2,z=3) ``` ## 二. 名称空间和作用域 1. 名称空间 1. 内置名称空间 1. 全局名称空间 1. 局部名称空间 2. 作用域 1. 全局作用域 2. 局部作用域 3. 名称空间的查询 1. globals:查询全局名称空间的名字 2. locals:查询局部名称空间的名字 ## 三. 函数的嵌套及静态作用域 1. 嵌套调用 2. 嵌套定义 !!!函数嵌套时的执行顺序 ```python 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. 函数可以被赋值 ```python def foo(): print(\'foo\') print(foo) f = foo print(f) ``` 1. 把函数当成参数传递 ```python def foo(): print(\'foo\') def bar(func): >>>;foo print(func) func() bar(foo) ``` 1. 把函数当成返回值 ```python def foo(): print(\'foo\') def bar(func): print(func) return func f = bar(foo) print(f) ``` 2. 把函数当成容器类型的元素去用 ```python 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. 闭包函数概念: * 首先是内部定义的函数,该函数对外部作用域而不是全局作用域名字的引用 ```python 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 ``` ```python from urllib.request import urlopen def f1(url): def f2(): print(urlopen(url).read()) return f2 baidu = f1(\'http://www.baidu.com\') #爬网页 baidu() ```

以上是关于Python全栈之路Day19的主要内容,如果未能解决你的问题,请参考以下文章

Python全栈之路Day15

Python全栈之路Day2 (补)

Python全栈之路Day13

Python全栈之路Day16

Python全栈之路Day18

Python全栈之路Day21