zoukankan      html  css  js  c++  java
  • python day12

    函数默认值的细节

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

    a = 10

    def fn(num = a):

      print(num)    #打印出来的还是10

    a = 20

    fn()

    三元表达式(就是if...else...的语法糖)

    三元表达式就是用于简化if...else...结构的语法

        --1、只能简化if...else...结构,其他if分支结构不管

        --2、一个分支只能提供一个结果

      a = input('>>')

      b = input('>>')

      res = a if a > b else b  #输出的是a和b中的大者

      print(res)        #三元表达式前面的是条件成立输出的结果后面是条件失败的结果

    列表与字典的推导式

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

    ls = [v for v in range(1,6)]

    print(ls)  #  -->[1,2,3,4,5]

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

    ls = [v*2 for v in range(1,6)]

    print(ls)    -->[2,4,6,8,10]

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

    print(ls)  -->['奇数', '偶数', '奇数', '偶数', '奇数']    #可以把三元表达式应用于列表推导式

    ---------------------------------------------------------------------------------------------------

    ls = [['A',2],('s','k')]
    dic = {k:v for k,v in ls}
    print(dic)        -->{'A': 2, 's': 'k'}
    dic = {k.lower():v for k,v in ls}  #可以做一些简单逻辑
    print(dic)        -->{'a': 2, 's': 'k'}

    函数对象*****

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

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

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

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

      def fn():pass     #这里的fn就是函数对象

    函数对象的应用场景*****

    def func():

      pass

    1、函数对象()就是对函数的调用

      fn1() --->就是对函数的调用

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

      fn2 = fn1  #my_fn1和fn2都存着函数的地址,所以都是函数对象,后面加()就可以调用该函数

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

      def fn3(func):

        func()

      fn3(fn1)    #将函数对象fn1作为参数传入fn3就可以在fn3函数的内部直接调用fn1函数

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

      def fn4():

        return func

      func = fn4()

    5、函数对象可以作为容器的成员

      ls = [fn1,fn2,fn3]

    名称空间*****

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

    三种名称空间

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

    Global:全局名称空间,文件级,多个,随着所属文件的打开而产生,文件的关闭而销毁

    Local:局部名称空间,函数级,多个,随着所属函数的执行而产生,函数执行结束而销毁

    堆栈存储方式:先进的后出,后进的先出

    加载顺序:先加载内置名称空间,再加载全局名称空间,最后加载局部名称空间

    #同一名称空间内变量名不可以重复,再次使用变量名会发生重指向

    #不同名称空间的变量名可以重复,但不冲突,调用时会有一个顺序

    #遍历变量名的顺序:现在所属的名称空间遍历,找不到就往上一级名称空间遍历寻找,最后内置名称空间都找不到的话就会报错。

    函数的嵌套定义

    在一个函数的内部定义另一个函数

      --所以想要调用内部函数,只能在内部调用

    def outer():

      print('outer run')

      a = 10    #普通变量,随着函数的调用而产生,结束而销毁

      def inner():  #函数对象和普通变量一样,随着函数的调用而产生,结束而销毁

        print('inner run')

      inner()    #所以只能在函数的内部调用

    outer()

    作用域

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

    四种作用域

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

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

    Enclosing:嵌套作用域:作用于当前函数及内部嵌套的函数

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

    #注:1、不同作用域之间的名字不冲突,所以重名无所谓

        2、每个作用域都优先使用自己作用域的名字,没有的话再找更高的名称空间的名字,知道内置,还没有就报错

        3、查找顺序:Local > Enclosing > Global > Built-in

  • 相关阅读:
    谷歌的 I/O 2019,究竟推出了什么新特性?
    Flutter交互实战-即刻App探索页下拉&拖拽效果
    5G到来,App的未来,是JavaScript,Flutter还是Native ?
    python爬虫-房天下-登录
    python爬虫-有道翻译-js加密破解
    虾米音乐爬虫
    Golang 读写文件
    Golang-使用md5对字符串进行加密
    Golang-使用mysql
    Golang 传递任意类型的切片
  • 原文地址:https://www.cnblogs.com/hesujian/p/10776279.html
Copyright © 2011-2022 走看看