zoukankan      html  css  js  c++  java
  • 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() ```

  • 相关阅读:
    Matlab 绘制三维立体图(以地质异常体为例)
    Azure DevOps的variable group实现array和hashtable参数的传递
    Azure DevOps 利用rest api设置variable group
    Azure AADSTS7000215 其中一种问题的解决
    Power BI 实现实时更新Streaming Dataset
    AAD Service Principal获取azure user list (Microsoft Graph API)
    Matlab 沿三维任意方向切割CT图的仿真计算
    Azure Powershell script检测登陆并部署ARM Template
    Azure KeyVault设置策略和自动化添加secrets键值对
    Azure登陆的两种常见方式(user 和 service principal登陆)
  • 原文地址:https://www.cnblogs.com/sama/p/7825399.html
Copyright © 2011-2022 走看看