1. 程式人生 > >python獲得變數的名稱,獲得傳參(形參和實參)的名稱

python獲得變數的名稱,獲得傳參(形參和實參)的名稱

1.需求和例子

需求:獲得變數的名稱
實現例子:

aaa = '23asa'
bbb = 'kjljl2'
loc = locals()

def get_variable_name(variable):
    print loc
    for key in loc:
        if loc[key] == variable:
            return key


print get_variable_name(aaa)

輸出結果截圖:
這裡寫圖片描述

需求:獲得形參的名稱
實現例子:

aaa = '23asa'
bbb = 'kjljl2'


def get_variable_name
(variable):
loc = locals()#把locals()方法移到函式內 print loc for key in loc: if loc[key] == variable: return key print get_variable_name(aaa)

輸出結果截圖:
這裡寫圖片描述

需求:獲得實參的名稱
實現例子:

aaa = '23asa'
bbb = 'kjljl2'
lst = [aaa,bbb,aaa]
value = lst[1]
loc = locals()

def get_variable_name
(variable):
print loc for key in loc: if loc[key] == variable: return key print get_variable_name(value)

輸出結果截圖:
這裡寫圖片描述

2.程式碼解釋及知識擴充

Python有兩個內建函式——locals 和globals,這兩個函式主要提供,基於字典的訪問區域性和全域性變數的方式。

在理解這兩個函式時,首先來理解一下python中的名字空間概念。Python使用叫做名字空間的東西來記錄變數的軌跡。名字空間只是一個字典,它的鍵字就是變數名,字典的值就是那些變數的值。實際上,名字空間可以象Python的字典一樣進行訪問。

每個函式都有著自已的名字空間,叫做區域性名字空間,它記錄了函式的變數,包括函式的引數和區域性定義的變數。每個模組擁有它自已的名字空間,叫做全域性名字空間,它記錄了模組的變數,包括函式、類、其它匯入的模組、模組級的變數和常量。還有就是內建名字空間,任何模組均可訪問它,它存放著內建的函式和異常。

當一行程式碼要使用變數 x 的值時,Python會到所有可用的名字空間去查詢變數,按照如下順序:

1.區域性名字空間 - 特指當前函式或類的方法。如果函式定義了一個區域性變數 x,Python將使用這個變數,然後停止搜尋。
2.全域性名字空間 - 特指當前的模組。如果模組定義了一個名為 x 的變數,函式或類,Python 將使用這個變數然後停止搜尋。
3.內建名字空間 - 對每個模組都是全域性的。作為最後的嘗試,Python將假設 x 是內建函式或變數。

如果Python在這些名字空間找不到 x,它將放棄查詢並引發一個 NameError 的異常,同時傳遞There is no variable named 'x' 這樣一條資訊。

區域性變數函式locals例子(locals 返回一個名字/值對的字典):

def foo(arg, a):  
    x = 1  
    y = 'xxxxxx'  
    for i in range(10):  
        j = 1  
        k = i  
    print locals()  


#呼叫函式的列印結果    
foo(1,2)  
#{'a': 2, 'i': 9, 'k': 9, 'j': 1, 'arg': 1, 'y': 'xxxxxx', 'x': 1} 

這裡寫圖片描述

from module import 和 import module之間的不同。使用 import module,模組自身被匯入,但是它保持著自已的名字空間,這就是為什麼你需要使用模組名來訪問它的函式或屬性(module.function)的原因。但是使用 from module import,實際上是從另一個模組中將指定的函式和屬性匯入到你自己的名字空間,這就是為什麼你可以直接訪問它們卻不需要引用它們所來源的模組的原因。

相關推薦

菜鳥用Python 識別批量圖片再讀取文字用百度文字識別

直接上程式碼吧,本人菜鳥剛學的,有問題指教MyPath = "G:\\python\\xxxxx\\"#這是讀取的圖片存放的資料夾的路徑,可以改為要讀取的資料夾 filesoure = MyPath def baiduduqu(filesoure,filename): fr

Spring Cloud 進階之路 -- Eureka的高可用搭建 Eureka叢集開發環境生產環境

  Eureka 作為註冊中心,必須保障高可用,否則會直接影響有關的整個服務體系。 以下分別進行開發環境和生產環境的多服務中心叢集配置。   目錄 一、開發環境簡易配置: 1、配置Configurations 2、在Configurations 裡

python資料預處理 :樣本分佈不均過取樣欠取樣

何為樣本分佈不均: 樣本分佈不均衡就是指樣本差異非常大,例如共1000條資料樣本的資料集中,其中佔有10條樣本分類,其特徵無論如何你和也無法實現完整特徵值的覆蓋,此時屬於嚴重的樣本分佈不均衡。 為何要解決樣本分佈不均: 樣本分部不均衡的資料集也是很常見的:比如惡意刷單、黃牛訂

Spring Cloud 進階之路 -- Eureka的高可用搭建 Eureka叢集開發環境生產環境

Eureka 作為註冊中心,必須保障高可用,否則會直接影響有關的整個服務體系。 以下分別進行開發環境和生產環境的多服務中心叢集配置。 目錄 一、開發環境簡易配置: 1、配置Configurations 在上一

給定一個字串表示式s計算其值使用stringstack實現

<span style="font-size:18px;">toPosfix函式將中綴表示式轉換為字尾表示式,calculatePosfix函式計算字尾表示式的值。 #include <iostream> #include <stack&g

python獲得變數名稱獲得名稱

1.需求和例子 需求:獲得變數的名稱 實現例子: aaa = '23asa' bbb = 'kjljl2' loc = locals() def get_variable_name(variable): print loc for key

百度地圖根據地點名稱獲得座標但是延時太重不利於使用

localSearch.setSearchCompleteCallback(function (searchResult) {     var poi = searchResult.getPoi(0);     lng=poi.point.lng; l

Axios的兩種方式表單資料json字串Form DataRequest Payload

第一種方式:Form Data Axios引數配置: 1、引入 import Qs from 'qs' 2、 return request({ headers: { 'Content-Type': 'application/x-www-form-

值型別引用型別引用

    C# 中有兩種型別:引用型別和值型別。引用型別的變數儲存對其資料(物件)的引用(地址),而值型別的變數直接包含其資料(副本)。     對於引用型別,兩種變數可引用同一物件;因此,

Python 操作FTP檔案下載檔案

#!C:/Python27 #coding=utf-8 from ctypes import * import os import sys import ftplib class myFtp: ftp = ftplib.FTP() bIsDir = F

Python讀取文本輸出指定中文字符串

class 分享 /tmp () fun 問題 print fin 斷路器 因業務需求,需要提取文本中帶有檢查字樣的每一行。 樣本如下: 1 投入10kVB、C母分段820閉鎖備自投壓板 2 退出10kVB、C母分段820備投跳803壓板 3 退出10kVB

根據request檔案使用Spring CommonsMultipartResolver 上檔案

/**      * 根據request,獲取上傳的非結構化資料      * 備註:非結構化資料會儲存臨時檔案,並返回臨時檔案路徑的集合      *      

python入門習題——20有效的括號簡單

給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。 有效字串需滿足: 左括號必須用相同型別的右括號閉合。 左括號必須以正確的順序閉合。 注意空字串可被認為是有效字串。 示例 1: 輸入: "()" 輸出: true

python入門習題——9迴文數簡單

判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個迴文

python入門習題——1兩數之和簡單

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [

完美解決:出現root與變數zmatlab求解方程方程組

用solve解一個方程時。發現結果出現root和變數z,什麼?? 原始碼: syms b m y eqn = (-b-2)* y^3+ 3* b *m*y^2-3*b*m^2*y+b*m^3== 0; y = solve(eqn, y) 結果: 好吧,上面這個結果完全看不懂?

請求找不到主機請檢查該名稱然後重試ping ip沒問題ping域名不行

  開始----執行----輸入cmd----輸入netsh winsock reset確認,重啟 命令提示符是在作業系統中,提示進行命令輸入的一種工作提示符。在不同的作業系統環境下,命令提示符各不相同。 這個命令作用是重置 Winsock 目錄。如果一臺機器上的Winsock協議配置有問題的話

任意數求和不限傳遞個數都可以求和 對非有效數字的值進行規避 在函式外面可以使用求和的結果

該函式功能主要通過對實參集合arguements()函式的應用,將傳遞過來的實參值全部儲存到改函式中,便於呼叫。通過isNaN方法來驗證是否為有效數字,以及對Number()方法的應用。 主要功能的JS程式碼如下: <script> /*arguments:當函

python已知元素獲取元素索引numpypandas

目前搜尋到的方法有: np.where(‘元素’) 還有就是pandas的方法: df.index(‘元素’) 但是第二個方法的問題就是會報錯,嗯,這就比較尷尬了,查詢了網上的解決方案,有這樣的: 此外使用 df[df['列名'].isin([相應的值

Python時間獲取詳解Django獲取時間詳解模板中獲取時間詳解navie時間aware時間

# 1、Python獲取到的時間 import pytz from datetime import datetime now = datetime.now() # 這個時間為navie時間(自己不