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

复习,

昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较

函数的参数,‘

实参与形参

      形参:在函数定义时()中出现的参数

   实参,在函数调用时()中出现的参数

实参的分类

  位置实参:给位置形参传值,必须 按位置

  关键字实参:给位置与关键字形参,不需要按照顺序

形参的分类,

··无值位置形参

··有值位置形参

··可变长位置形参

··有无值关键字形参

··可变长关键字形参

def fn(a,b=10,*args,x,y=10,z,**kwargs):pass

4:打散机制

def func(*args,**kwargs):

  pass

func(*[],**{})    #*会把单列容器打散,**会打散双列容器

函数的嵌套调用’

    在被调用的函数中调用其他函数,在被调用的函数中要去使用其他函数的功能

今日内容:

#函数默认值的细节,‘

#数据类型的补充: 三元表达式 ,列表推导式,字典推导式

函数对象

名称空间与作用域,

函数的嵌套定义:在函数内部定义函数

函数默认值的细节

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

a=100
def func(num=a):
print(num)#100
a=200
func()

三元表达式

又称三目运算符

用于简化if...else: 的语法结构

  只能解决  if ...else:结构,其他if分支结构都不行

  一个分支提供一个结果,如果一个分支提供了多个结果将多个结果通过元祖返回

a=int(input('请输入a:'))
b=int(input('请输入b:'))
res=a if a>b else b
print(res)

 列表与字典推导式

#快速生成列表或字典的语法糖,且能在生成过程中 添加简单的逻辑

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

ls =[v for v in range(1,6)]
print(ls) #[1, 2, 3, 4, 5]

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

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

ls=[['a',1],['S',5]]
res={k.lower():v for k,v in ls}
print(res)#{'a': 1, 's': 5}

函数对象

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

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

        ··存放整型就是整型对象,存放函数的地址就是函数对象,存放文件的地址就是文件对象

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

def fn():pass

my_fn=fn

#my_fn | fn 都存着函数地址,所以都是函数对象,函数对象的使用就是  函数对象() 来调用函数

#函数对象的应用场景

#函数对象() 就是调用函数

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

#函数对象可以最为函数的返回值

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

# 1.函数对象()就是调用函数
def fn1():
  pass
fn1()
# 2.函数对象可以直接作为变量赋值给其他变量
def fn2():
  pass
my_fn = fn2
print('>>>', my_fn, fn2)
my_fn()
# 3.函数对象可以作为函数的参数
def fn3(func): # func = my_fn = fn2
  func()
fn3(my_fn)
# 4.函数对象可以作为函数的返回值
def fn4():
  return my_fn
my_fn2 = fn4()
# 5.函数对象可以作为容器类型的成员
ls = [my_fn, my_fn2]

名称空间

队列储存方式,先进先出

堆栈存储方式,先进后出

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

三种名称空间:

Built-in:内置名称空间:系统级 一个 随着解释器的执行而产生,解释器停止而销毁

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

Local:局部名称空间,函数级,多个,随所属函数执行而产生,函数执行完毕而摧毁

#文件中的if while for with 等  这些能产生缩进的关键字并不能产生名称空间

#加载顺序 Built-in >Global>Local

 函数的嵌套定义

#概念,在一个含税不定义另一个函数

def outer():
print('outer run')
a=10
#函数对象(变量) 与普通对象一样 ,在函数内部定义,随函数调用而产生
#调用结束而销毁,所以只能在函数内部使用
def inner():
print('inner run')
inner()
outer()

作用域

#作用域:变量起作用的范围

四种作用域

#Built-in 内置作用域,作用所有文件的所有地方

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

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

#Local,局部作用域,作用当前函数内部

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

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

查找顺序,Local>Enclosing>Global>Built-in

猜你喜欢

转载自www.cnblogs.com/jixu/p/10774576.html