今日主要内容

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. 使用FakeAPP进行AI换脸必看!!

    C盘生于容量小于5G的千万别用啊!!笔者本人因为C盘只剩了3G,根本用不上这个,最后会把大小为4G的core文件必须移植到C盘当中,俺的CUDA也白安装了,而且还不小心安装成CUDA8了,应该用9好么 ...

  2. HTML5+CSS3入门学习(一)——HTML5

    什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web 世界已经经历了巨变. HTML5 仍 ...

  3. 区块链技术现状&前景

    炒作周期 Gartner 在 2017 年发布的新兴技术炒作曲线,这张图是去年 8 月发布的,当时估计它们也没料到随后能有那么火,当时区块链在这个位置,其实是已经过了炒作的巅峰期,正在往低谷走的这个阶 ...

  4. RecyclerViewItemTouchHelperDemo【使用ItemTouchHelper进行拖拽排序功能】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录使用ItemTouchHelper对Recyclerview进行拖拽排序功能的实现. 效果图 代码分析 ItemTouchHel ...

  5. Linux~学习笔记目录索引

    回到占占推荐博客索引 本篇文章是对自己学习Linux及在它的环境下部署工具的一个总结,以方便自己查阅,也给他人一个帮助,本文章同时会不断的更新,欢迎大家订阅! 本目录包括的内容会包括linux基础命令 ...

  6. 微信小程序开发03-这是一个组件

    编写组件 基本结构 接上文:微信小程序开发02-小程序基本介绍 我们今天先来实现这个弹出层: 之前这个组件是一个容器类组件,弹出层可设置载入的html结构,然后再设置各种事件即可,这种组件有一个特点: ...

  7. 详解MySQL表空间以及ibdata1文件过大问题

    ibdata1文件过大 原因分析 ibdata1是一个用来构建innodb系统表空间的文件,关于系统表空间详细介绍参考MySQL官网文档 上面是一个数据库的ibdata1文件,达到了780多G,而且还 ...

  8. ubuntu:xxx is not in the sudoers file. 问题解决

    ubuntu 下普通用户用 sudo 执行命令时报 "xxx is not in the sudoers file.This incident will be reported" ...

  9. Asp.Net Web APi 路由的特点

    在ASP.NET Web API中,路由是基于HTTP协议 GET请求路由到以GET开头的控制器方法,POST请求路由到以POST开头的控制器方法中,GET方法和GetProducts,都能与GET请 ...

  10. 操作Work、Excel、PDF

    操作Work.Excel.PDF 1.NPOI插件 namespace XBLRDiff.BLL.Excel {      public class ExcelImport:IDisposable   ...