日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

[Python3] 020 借函数,谈一谈变量的作用域

發(fā)布時(shí)間:2024/10/12 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Python3] 020 借函数,谈一谈变量的作用域 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 1. 概述
  • 2. 分類
  • 3. 變量的作用范圍
    • 少?gòu)U話,上例子
  • 4. 將局部變量提升為全局變量
    • 少?gòu)U話,上例子
  • 5. 內(nèi)建函數(shù) globals() 與 locals()
    • 少?gòu)U話,上例子
  • 6. 邪惡的 eval() 與 執(zhí)行者 exec()
    • (1) eval()
    • (2) exec()
  • 7. 遞歸函數(shù)
    • (1) 概述
    • (2) 少?gòu)U話,上例子

1. 概述

  • 從“變量作用域”這個(gè)詞不難看出:變量有作用范圍限制

2. 分類

  • 按照作用域分類
  • 全局(global):在函數(shù)外部定義
  • 局部(local):在函數(shù)內(nèi)部定義

  • 3. 變量的作用范圍

    • 全局變量:在整個(gè)全局范圍都有效
      • 全局變量在局部可以使用(即,在函數(shù)內(nèi)部可以使用在函數(shù)外部定義的變量)
    • 局部變量:僅在特定的局部范圍內(nèi)有效
      • 局部變量在出了自己的范圍后就無(wú)法使用
    • LEGB 原則
      • L(Local)局部作用域
      • E(Enclosing function locale)外部嵌套函數(shù)作用域
      • G(Global module)函數(shù)定義所在模塊作用域
      • B(Builtin):python 內(nèi)置模塊的作用域
      • LEGB 規(guī)定了查找一個(gè)名稱的順序?yàn)?#xff1a;local-->enclosing function locals-->global-->builtin

    少?gòu)U話,上例子

    # 例1num1 = 100 # 全局變量def func():print("num1 =", num1)num2 = 99 # 局部變量print("num2 =", num2)return Noneprint("num1 =", num1) func() print("num2 =", num2)
    • 運(yùn)行結(jié)果

    num1 = 100
    num1 = 100
    num2 = 99

    ---------------------------------------------------------------------------
    NameError……name 'num2' is not defined


    4. 將局部變量提升為全局變量

    • 使用 global

    少?gòu)U話,上例子

    # 例2def func():global num1num1 = 100print("num1 =", num1)num2 = 99print("num2 =", num2)return Nonefunc() print("num1 =", num1)
    • 運(yùn)行結(jié)果

    num1 = 100
    num2 = 99
    num1 = 100


    5. 內(nèi)建函數(shù) globals() 與 locals()

    • 通過(guò) globals() 和 locals() 可以顯示出全局變量和局部變量

    少?gòu)U話,上例子

    # 例3num1 = 1 num2 = 2def func(n1, n2):n3 = 666print("Local s= {0}".format(locals()))print("Globals = {0}".format(globals()))return Nonefunc(11, 22)
    • 運(yùn)行結(jié)果

    Locals = {'n1': 11, 'n2': 22, 'n3': 666}
    Globals = {'name': 'main', 'doc': None, 'package': None, 'loader': <_frozen_importlib_external.SourceFileLoader object at 0x000001C21D86E940>, 'spec': None, 'annotations': {}, 'builtins': <module 'builtins' (built-in)>, 'file': '.\globals & locals.py', 'cached': None, 'num1': 1, 'num2': 2, 'func': <function func at 0x000001C21D82C2F0>}


    6. 邪惡的 eval() 與 執(zhí)行者 exec()

    (1) eval()

    • 把一個(gè)字符串當(dāng)成一個(gè)表達(dá)式來(lái)執(zhí)行, 返回表達(dá)式執(zhí)行后的結(jié)果
    • 示例
    # 例4 eval(string_code, globals=None, locals=None)num1 = 100 num2 = 200num3 = num1 + num2 num4 = eval("num1+num2")print(num3) print(num4)
    • 運(yùn)行結(jié)果

    300
    300


    (2) exec()

    • 跟 eval() 功能類似, 但 exec() 不返回結(jié)果
    • 示例
    # 例5 exec(string_code, globals=None, locals=None)num1 = 100 num2 = 200num3 = num1 + num2 num4 = exec("print('num1 + num2 =', num1+num2)")print(num3) print(num4)
    • 運(yùn)行結(jié)果

    num1 + num2 = 300
    300
    None


    7. 遞歸函數(shù)

    (1) 概述

    • 簡(jiǎn)單地說(shuō),就是“我調(diào)用我自己”
    • 優(yōu)點(diǎn):簡(jiǎn)潔,容易理解
    • 缺點(diǎn):對(duì)遞歸深度有限制,消耗資源大
      • python 對(duì)遞歸深度有限制,超過(guò)限制報(bào)錯(cuò)
      • 也可以手動(dòng)更改遞歸深度
    • 寫遞歸程序時(shí),要注意結(jié)束條件

    (2) 少?gòu)U話,上例子

    # 例6 錯(cuò)誤示范num = 0def func(): # 會(huì)暴走的global numnum += 1print(num)func() # 調(diào)用自己return Nonefunc()
    • 運(yùn)行結(jié)果

    先是像 excel 一樣,縱向數(shù)字累加,然后拋出異常。

    RecursionError……maximum recursion depth exceeded while calling a Python object

    遞歸錯(cuò)誤:調(diào)用 python 對(duì)象時(shí)超過(guò)了最大遞歸深度。


    # 例7 斐波那契額數(shù)列 # 數(shù)學(xué)公式為: f(1) = 1, f(2) = 1, ... f(n) = f(n-1) + f(n-2)def fib(n): # n 表示斐波那契數(shù)列的第 n 個(gè)數(shù)if n == 1 or n ==2: # or 表示或者return 1return fib(n-1) + fib(n-2)print(fib(10))
    • 運(yùn)行結(jié)果

    55

    轉(zhuǎn)載于:https://www.cnblogs.com/yorkyu/p/10297787.html

    總結(jié)

    以上是生活随笔為你收集整理的[Python3] 020 借函数,谈一谈变量的作用域的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。