今日主要内容

1.  函数默认值细节(*)

2.  数据类型补充:三元表达式、列表推导式、字典推导式 (***)

3.  函数对象:函数名的各种应用场景 (*****)

4.  名称空间与作用域:解释变量重复与冲突问题 (*****)

5.  函数的潜逃定义:在函数内部定义函数 (*****)

1.  函数默认值细节

如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被定义为当时变量存在的值

a = 10def fn(num = a):   # num = 10    a = 20    print(num)     # 10

a = 200fn()

2.  数据类型补充

2.1  三目运算符(三元表达式)

三目运算符:用于简化 if...else...的语法结构
1) 只能解决if...else...结构,其他if分支结构都不管
2)一个分支提供一个结果: 如果一个分支提供了多个结果, 将多个结果通过元组返回

a = int(input('a:'))     # 10b = int(input('b:'))     # 20if a > b:    print(a)else:    print(b)             # 20

res = a if a > b else bprint(res)               # 20

2.2  列表推导式(快速生成列表的语法糖)

能被列表推导式推导的数据源必须在循环取值时可以得到一个值

可以应用于生成多个数据的场景,推导式也可以拥有见到的逻辑

ls = []for i in range(1,6):    ls.append(i)print(ls)                    # [1, 2, 3, 4, 5]

ls = [v for v in range(1,6)] # [1, 2, 3, 4, 5]print(ls)
ls = ['奇数' if v % 2 != 0 else '偶数' for v in range(1,6)]  print(ls)          # ['奇数', '偶数', '奇数', '偶数', '奇数']

2.3  字典推导式(快速生成字典的语法糖)

能被推导式推导的数据源必须在循环取值时可以被解压赋值为两个值

ls = [('a',1),['b',2]]print(dict(ls))       # {'a': 1, 'b': 2}

res = {k:v for k,v in ls}print(res)            # {'a': 1, 'b': 2}

res = {k.upper():v for k,v in ls}print(res)            # {'A': 1, 'B': 2}

3.  函数对象

3.1.  函数对象

在python中,所有变量存放的值只要是地址,就称之为对象

所有的变量都是用来存放地址的,所以都是对象

函数对象:存放函数地址的变量就是函数对象

3.2  应用场景

1.  函数对象加()就是调用函数

2.  函数对象可以直接作为变量赋值给其他变量

3.  函数对象可以作为函数的参数

4.  函数对象可以作为函数的返回值

5.  函数对象可以作为容器类型的成员

1.函数对象()就是调用函数def f1():    passf1()# 2.函数对象可以直接作为变量赋值给其他变量def f2():    passf21 = f2f21()# 3.函数对象可以作为函数的参数def f3(func):  # func = f21 = f2    func()fn3(f21)# 4.函数对象可以作为函数的返回值def f4():    return f5f4()# 5.函数对象可以作为容器类型的成员ls = [f21, f5]

4.  名称空间与作用域

4.1  名称空间

名称空间:就是名字与地址的对应关系,可以被python解释器遍历查找,采用堆栈存储方式

队列存储方式:先进先出

堆栈存储方式:先进后出,优先访问到的是最后添加到结构中的变量

在内置、全局、局部三个位置,只要出现了变量的定义,一定产生了自己名称空间中的民资,这些名字之间没有冲突

三种名称空间:

1.  内置名称空间:系统级,一个,随解释器执行而产生,解释器停止而销毁

2.  全局名称空间:文件级,多个,随所属文件加载而产生,稳健运行完毕而销毁

3.  当前名称空间:函数级,多个,随所属函数执行而产生,函数执行完毕而销毁

【注】文件的if,while,for,with这些能产生缩减的关键字并不能产生名称空间

加载顺:内置名称空间 > 全局名称空间 > 当前名称空间

4.2  作用域

作用域:变量名(名字,对象)起作用的范围

四种作用域

内置作用域:作用所有文件的所有地方

全局作用域:作用当前文件的所有地方

嵌套作用域:作用当前函数以及内部被嵌套的函数

局部作用域:作用当前的函数内部

【注】

不同作用域之间名字不冲突,已达到名字的重用

每个作用域优先使用自己作用域的名字,没有再找更大的名称空间的名字,直到内置,还没有就报错

查找顺序:局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域

print(len)              # <built-in function len>len = 10def f1():    len = 20    print(len)          # 20    def f2():        len = 30        print(len)      # 30    f2()f1()print(len)              # 10   

5.  函数的嵌套定义

概念:在一个函数中定义另一个函数

def outter():    print('from outter:')    def inner():              # 嵌套定义在outter函数内部        print('from inner:')    inner()outter()

Python--day12(三元表达式、函数对象、名称空间与作用域、函数嵌套定义)的更多相关文章

  1. day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义

    复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...

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

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

  3. python之三元表达式,列表|字典推导式,函数对象

    #### 三元表达式: 就是if....else...的语法糖 # -- 1) 只能解决if...else...结构,其他if分支结构都不管 # -- 2)一个分支提供一个结果: 如果一个分支提供了多 ...

  4. python 函数的名称空间及作用域

    一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...

  5. Python——day11 函数(对象、名称空间、作用域、嵌套、闭包)

    一.函数对象  函数名就是存放了函数的内存地址,存放了内存地址的变量都是对象,即 函数名 就是 函数对象  函数对象的应用 1. 可以直接被引用  fn = cp_fn 2 .可以当作函数参数传递 c ...

  6. python之函数名称空间,作用域,嵌套函数

    目录 嵌套函数 定义 名称空间的三大类(只存变量名) 名称空间加载顺序 变量名的查找顺序为 作用域 嵌套函数 定义 函数内部定义的函数,无法在函数外部使用内部定义的函数. def f1(): def ...

  7. day12 函数对象,名称空间与作用域

    """ 今日内容: 1.函数参数传值细节 2.三元表达式 3.列表及字典推导式 4.函数对象 5.名称空间与作用域 6.函数的嵌套定义初识 ""&qu ...

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

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

  9. PYTHON-函数对象,嵌套,名称空间与作用域,闭包函数

    一 函数是第一类对象,即函数可以当作数据传递 1 可以被引用 2 可以当作参数传递 3 返回值可以是函数 3 可以当作容器类型的元素 def foo(): return len f = foo pri ...

  10. python学习Day12 函数的默认值、三元表达式、函数对象(函数名)的应用场景、名称空间与作用域

    复习 1.字符串的比较: -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 2. 函数的参数 : 1)实参与形参:       -- 形参:在函数定义时()中出现的参数       ...

随机推荐

  1. Gradle的一些技巧和遇到的问题

    全局变量的使用 在多个module的情况下,不同module的build.gradle文件中有部分配置项类似,或者依赖的类库,有部分是相同的,在维护上不是很方便,这个时候就可以考虑统一配置.在项目根目 ...

  2. 多线程工具类:CountDownLatch、CyclicBarrier、Semaphore、LockSupport

    ◆CountDownLatch◆ 假如有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以.比如你想要买套房子,但是呢你现在手上没有钱.你得等这个月工资发了.然后年终奖发了.然后朋友借你得钱 ...

  3. 使用 shell / python 进行sql的excel报表导出

    如果要求你进行一个表数据的导出,如果使用shell的话,很容易做到,即执行一下 select 语句就可以拿到返回结果了! 如下: /usr/bin/mysql -u"${username}& ...

  4. ubuntu-18.04 安装zsh的方法步骤

    zsh是一款跨平台的轻量级的终端,功能十分强大,会极大地提升你的工作效率.安装指南: ➜ ~ sudo apt-get install zsh ➜ ~ zsh --version #确认是否安装成功 ...

  5. 理解滑动平均(exponential moving average)

    1. 用滑动平均估计局部均值 滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average),可以 ...

  6. PreferencesUtils【SharedPreferences操作工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 可以替代ACache用来保存用户名.密码. 相较于Acache,不存在使用猎豹清理大师进行垃圾清理的时候把缓存的数据清理掉的问题. ...

  7. BeetleX之HttpClusterApi应用详解

    之前的文章已经介绍过如何使用HttpClusterApi进行去中心化的HTTP集群服务访问,这一章主要详细讲述如何使用HttpClusterApi,主要包括如何定义节点,创建服务接口和使用接口描述不同 ...

  8. python使用魔法函数创建可切片类型

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ 可切片的对象 """ import nu ...

  9. 补习系列(14)-springboot redis 整合-数据读写

    目录 一.简介 二.SpringBoot Redis 读写 A. 引入 spring-data-redis B. 序列化 C. 读写样例 三.方法级缓存 四.连接池 小结 一.简介 在 补习系列(A3 ...

  10. Generator和Async

    引言 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还有一种常用的解决方案,它就 ...