"""
今日内容:
1、函数参数传值细节
2、三元表达式
3、列表及字典推导式
4、函数对象
5、名称空间与作用域
6、函数的嵌套定义初识
""" """
一、函数参数的传值细节
举例:
num = 10
def fn(n=num):
print(n)
num = 20
fn()
在上例中函数的参数列表是一个带有默认值的位置形参,由于初识传值为 n = num = 10
在调用之前num又重新赋值了,此时在函数内打印n 值为10
原因为:在执行时,函数的参数已经由于值拷贝赋值上了10,此时num被重新赋值不会影响n与10的绑定关系
""" """
二、三元表达式
三元表达式是if...else...的语法糖(简写形式),与原来的判断语句没有任何区别
三元表达式的格式为:
a if a < b else b
三元表达式肯定会返回一个值,这个值可以被变量接收页可以进行打印
例如:
a = input("a:")
b = input("b:")
print(a if a > b else b) # 只会返回大值
三元表达式只能返回一个值,如果想要返回两个值,可以用元组将两个值进行接收,实际上还是一个值
""" """
三、列表及字典推导式
列表及字典的推导式就是列表及字典的语法糖,并且可以在生成列表及字典时可以添加简单的逻辑
我们平时创建列表及字典时经常会使用list() 及 dict() 进行创建,但是这样不能添加逻辑
列表及字典的推导式的格式为:
ls = [v for i in range(10)]
其与下方表达式一样:
ls = []
for i in range(10):
ls.append(i)
在进行列表推导式中还可以对列表中的值添加简单的逻辑,【可以在添加时使用三元表达式】
ls = ["偶数" if i % 2 == 0 else "奇数" for i in range(10)] #使用此方法定义函数时,必须使用else   另一种使用方法:
    ls = [i for i in range(10) if i%2==0] # 此方法可以不使用else 能被字典推到式推导的数据在循环取值时都必须可以被解压赋值为两个值
ls = [("a":1),("b",2)]
dic = {k:v for k,v in ls} # {"a":1,"b":2}
""" """
四、函数对象
在python中万物皆对象,所有能够保存的内存地址的变量统称为对象
-- 由于在函数中所有的变量都是用来保存内存地址的,所以所有的变量都是对象
--存放整数地址的是整型对象,存放函数内存地址的就是函数对象,实际上函数与普通的变量完全相同
举例:
def fn():
pass
在上例中,函数名fn中存放着函数的内存地址,如果要执行函数中的代码,只需要在函数的后面加()就可以执行
如果不执行函数,得到的是函数的内存地址,如果加括号执行函数,得到的就是函数的返回值 函数对象的使用场景:
1、作为调用函数 ---> 加()
2、作为函数的返回值
3、作为函数的参数
4、作为变量传递给其它函数
5、作为容器类型的元素 实例: 进行数学运算
def add(a, b):
return a + b def low(a, b):
return a - b def mul(a, b):
return a * b def div(a, b):
return a / b math_map = {
"add": add,
"low": low,
"mul": mul,
"div": div,
} # 完成映射关系
def get_math(math):
if math not in math_map:
print("该运算暂不支持")
else:
return math_map[math] def math(a, b, sym="add"):
sym = get_math(sym)
return sym(a, b) a = int(input("a: "))
b = int(input("b: "))
print(math(a,b,"mul")) """ """
五、函数的名称空间及作用域
-- 名称空间:函数名字与内存地址的对应关系,存储在堆区中,python解释器会遍历访问名称空间,采用的是堆栈存储结构
-- 堆栈存储结构:采用的是先进后出,后进先出的取值原则
-- 队列存储结构:采用先进先出、后进后出的取值原则 -- 三种名称空间:
-- Built-in:内置名称空间;系统级,一个;随解释器执行而产生,解释器停止而销毁
-- Global:全局名称空间;文件级,多个;随所属文件加载而产生,文件运行完毕而销毁
-- Local:局部名称空间;函数级,多个;随所属函数执行而产生,函数执行完毕而销毁 -- 名称空间的加载顺序: 内置名称空间(系统级) --> 全局名称空间(文件级) --> 局部名称空间(函数级)
-- 名称空间的遍历顺序:名称所在函数的局部名称空间 --> 函数所在函数的局部名称了空间 --> 全局名称空间 --> 内置名称空间 -- 作用域:名字起作用的范围
-- 四种作用域:
-- Built-in:内置作用域:作用所有文件的所有地方
-- Global:全局作用域:作用当前文件的所有地方
-- Enclosing:嵌套作用域:作用当前函数已内部被嵌套函数
-- Local:局部作用域:作用当前函数内部 -- 不同的作用域之间的名字可以重复,以达到重复使用名字的目的
-- 函数会优先查找自己作用域中的名字,如果未发现会查找上一级名称空间,再到全局名称空间,再到内置名称空间 """ """
六、函数的嵌套定义
-- 在函数中定义另一个函数叫做函数的嵌套定义
def outer():
print('outer run')
a = 10
def inner():
print('inner run')
inner()
outer() -- 函数对象(变量)与普通对象(变量)一样,在函数内部定义,随函数调用而产生,调用结束而销毁,所以只能在函数内部调用 """

day12 函数对象,名称空间与作用域的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义

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

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

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

  8. python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域

    一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...

  9. Python--day12(三元表达式、函数对象、名称空间与作用域、函数嵌套定义)

    今日主要内容 1.  函数默认值细节(*) 2.  数据类型补充:三元表达式.列表推导式.字典推导式 (***) 3.  函数对象:函数名的各种应用场景 (*****) 4.  名称空间与作用域:解释 ...

随机推荐

  1. 基于令牌桶算法实现的SpringBoot分布式无锁限流插件

    本文档不会是最新的,最新的请看Github! 1.简介 基于令牌桶算法和漏桶算法实现的纳秒级分布式无锁限流插件,完美嵌入SpringBoot.SpringCloud应用,支持接口限流.方法限流.系统限 ...

  2. css简单的一些基础知识

    css层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可 ...

  3. 利用node.js来实现长连接/聊天(通讯实例)

    首先: 需要在服务器端安装node.js,然后安装express,socket.io这两个模块,并配置好相关的环境变量等. 其次: 服务端代码如下: var app = require('expres ...

  4. Linux下网络配置与修改Centos7为列

    一.基础知识 手动绑定: 命令 一般是临时的修改,重启后失效,如:ifconfig.route.ip addr等. 修改配置文件 修改文件配置,永久有效,但是可能不能立即生效,需要重启服务 (serv ...

  5. Docker 核心技术之镜像

    镜像简介 镜像是一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容.依赖库.环境变量和配置文件等. 通过镜像可以创建一个或多个容器. 镜像搜索 - docker search 作用: ...

  6. 转: 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号

    最近由于项目的需要,需要在程序中获取机器的硬盘序列号和MAC地址等信息,在C#下,可以很容易的获得这些信息,但是在C++程序中感觉比较麻烦.经过百度,发现很多大虾都是通过WMI来获取这些硬件信息的,网 ...

  7. 数据库常用的事务隔离级别和原理?&&mysql-Innodb事务隔离级别-repeatable read详解

    转载地址:https://baijiahao.baidu.com/s?id=1611918898724887602&wfr=spider&for=pc https://blog.csd ...

  8. PHP加密解密函数(带有效期,过了有效期也解不了)

    转的,原来应该是discuz中弄的 <?php //加解密函数 //此函数的厉害之处在于可以在指定时间内加密还原字符串,超时无法还原. //这样我们就可以拿此函数来做很多用途了,比如:单点登录的 ...

  9. Element类型和HTML元素获取

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  10. Kafka学习笔记-如何保证高可用

    一.术语 1.1 Broker Kafka 集群包含一个或多个服务器,服务器节点称为broker. broker存储topic的数据. 如果某topic有N个partition,集群有N个broker ...