例如一個函數(shù)內(nèi)有一個變量i,怎么在函數(shù)外或另一個函數(shù)中調(diào)用或更改它。新手學(xué)習(xí),謝謝。
公司主營業(yè)務(wù):網(wǎng)站制作、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出長嶺免費(fèi)做網(wǎng)站回饋大家。
==============================
不能在函數(shù)外更改某函數(shù)里的局部變量,因?yàn)槊慨?dāng)你實(shí)例化那個函數(shù)的時候,那個函數(shù)里面的局部變量也會被重新賦值,重新定義,談何更改呢?
這一個全部變量和局部變量的問題,如果要實(shí)現(xiàn)樓主說的,必須使用全局變量(類中的self):
================bianliang.py===========
#coding: utf-8
i = 0 #定義一個全局變量i
def a():
'''
打印出i的值
'''
print i
def b():
global i
a() #調(diào)用a方法
print i #打印i
i = 1000 #重新賦值i
print i #打印i
a() #再次調(diào)用a方法
b()
=================================
%python bianliang.py
1000
1000
這個py文件里面使用了一個全局變量i,實(shí)現(xiàn)了a方法和b方法共用參數(shù)i
函數(shù)是組織好,可重復(fù)使用的,用來實(shí)現(xiàn)相關(guān)功能的代碼段
函數(shù)提高了代碼的重復(fù)利用率和應(yīng)用的模塊性。
除Python自帶的函數(shù)之外,也可以自己創(chuàng)建函數(shù),叫做自定義函數(shù)
語法:
函數(shù)代碼塊以 def 開頭
參數(shù)為 輸入值 ,放于函數(shù)名后口號里面,
函數(shù)內(nèi)容以冒號:開始,函數(shù)體縮進(jìn), return 返回 輸出值
函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定傳入的參數(shù)值,此時,如果多個函數(shù)則不需要按照指定順序。
在定義函數(shù)時,指定參數(shù)默認(rèn)值。調(diào)用時如果不傳入?yún)?shù),則使用默認(rèn)值
不定長部分如果沒有指定參數(shù),傳入是一個空元組
加了 兩個星號 ** 的參數(shù)會以字典的形式導(dǎo)入
/ 用來指明函數(shù)形參必須使用指定位置參數(shù),不能使用關(guān)鍵字參數(shù)的形式。
3.8版本之后的才能使用
不使用 def 定義函數(shù),沒有函數(shù)名
lamdba主體時一個表達(dá)式,而不是代碼塊,函數(shù)體比def簡單很多
定義在函數(shù)內(nèi)部的為局部變量,僅能在函數(shù)內(nèi)部使用
定義在函數(shù)外部的為全局變量,可在全局使用
模塊是將包含所有定義的函數(shù)和變量的文件,一般將同類功能的函數(shù)組和在一起稱為模塊。
模塊需要導(dǎo)入后,在調(diào)用相應(yīng)函數(shù)進(jìn)行使用
模塊導(dǎo)入的方法:
從模塊中導(dǎo)入一個指定的部分
把一個模塊的所有內(nèi)容全都導(dǎo)入
(1)解釋一下函數(shù)
def fun(lst):
lst[0] = 0;
lst = [4,5,6]
return 0
這里從頭到尾,lst都是同一個局部變量,也就是函數(shù)的參數(shù),為便于描述,我們把它稱為“張三變量”。
lst =[1,2,3] # 變量lst指向列表[1,2,3],為便于描述,把這個lst變量稱為“李四變量”,
# 而列表[1,2,3]稱為“王五列表”,“李四變量”指向“王五列表”
fun(lst)
調(diào)用fun時,把“李四變量”的值賦給了“張三變量”,從而“張三變量”也指向了“王五列表”。
在函數(shù)里:
執(zhí)行 lst[0] = 0 把“王五列表”的0號元素改為值0,
執(zhí)行 lst = [4,5,6] 修改了“張三變量”的值,把“張三變量”改為指向列表[4,5,6],
執(zhí)行 return 0 返回。
所以“王五列表”列表最后的值就是[0,2,3],“李四變量”仍然指向“王五列表”。
(2)如果想讓輸出結(jié)果為[4,5,6],請把語句 lst = [4,5,6] 改為
lst[:] = [4,5,6] # 此時是修改“張三變量”指向的“王五列表”
# 自然“李四變量”指向的“王五列表”值已經(jīng)變?yōu)閇4,5,6]。
可以把變量設(shè)置為全局變量:def fun1(): global var1 ...def fun2(): global var1
def 函數(shù)名():? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?函數(shù)體? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?return? 返回值? ? ? ? ? ? ? ? ? ? ? ? ? ??
def 函數(shù)名(非可選參數(shù),可選參數(shù)):
???函數(shù)體?
return 返回值
def 函數(shù)名(參數(shù),*b):
? ? 函數(shù)體
? ? return 返回值
函數(shù)名 = lambda 參數(shù) : 表達(dá)式
例1:f = lambda x , y? :? x + y? ? ? ? ? ? ? ? ? ? ? ??
調(diào)用:f(6 + 8)? ? ?輸出:14? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
例2:?f = lambda : "沒有參數(shù)的lambda函數(shù)!"
調(diào)用:?print(f())? ? 輸出: 沒有參數(shù)的lambda函數(shù)!