python中的参数值无法传递_python中关于函数参数值传递的问题
現在有兩個問題:
1.如果在一個類的定義中,想定義一個該類的對象,該怎么辦?
class UserInfo:
bidderID = 0 ? ? ? ?#用戶ID
name = " " ? ? ? ? ?#用戶名
addr = " " ? ? ? ? ?#IP地址
port = 0 ? ? ? ? ? ?#端口號
rname = '' ? ? ? ? ?#所在競拍室名稱
bidprice = 0 ? ? ? ? ? ?#出價
str=''
next = UserInfo() #???
會在next= UserInfo()這里報錯,提示說UserInfo未定義
2.怎樣讓傳遞給函數的參數(是一種自定義的類),在經過函數處理之后,可以改變它的值。
例如:
添加新用戶n的信息
def addUser(self,n):
self.pointer = self.root
n.next = self.pointer.next
self.pointer.next = n
self.count += 1
當其他函數調用這個函數,self.userList.addUser(self.user)之后,userlist會真的增加一項。
1. 引用自身
雖然Python是動態解釋型語言,但在解釋到
class UserInfo:
# ...
next = UserInfo() ?# <===
這句時,由于類UserInfo還沒定義結束,直接開始使用是不行的。但是Python本身由于是動態解釋運行的,完全可以利用動態修改內容(甚至新增屬性)來解決這個需求。例如
class UserInfo:
# ...
next = None
user = UserInfo()
user.next = UserInfo()
當然,這樣就做不到一個類內初始化了,那么可以使用一些魔術方法
class UserInfo:
def __init__(self):
# 要注意執行__new__創建的實例是沒經過__init__初始化的,切記
# 這在做很多lazy-loading的時候很管用
self.next = UserInfo.__new__(UserInfo)
參考:http://www.rafekettler.com/magicmethods.html#construction
2. 參數的引用傳遞
簡單來說
Python中的參數傳遞都是對參數引用的傳遞
參數的類型可以分為可變的(mutable)以及不可變的(immutable)
舉點例子
list是可變的,如果在函數內直接對其進行修改,而不修改引用,那么將會改變參數內容
def test(n):
n.append(2)
m = [1]
test(m)
print(m) ?# 這里將會輸出 [1, 2]
如果調換參數的引用的話
def test(n)
n = [2] # 這里其實已經將參數的引用調換了
m = [1]
test(m)
print(m) ?# 所以這里將輸出[1]
str是不可變的,也沒有對其inplace操作的方法,皆為返回一個新的copy
def test(n)
n = "Hello, Python!"
m = "Hello, World!"
test(m)
print(m) ? # 這里還是Hello, World!
stackoverflow上個更清楚的回答:
Python自己的文檔也有說明:https://docs.python.org/3/faq/programming.html#how-do-i-write-a-function-with-output-parameters-call-by-reference
總結
以上是生活随笔為你收集整理的python中的参数值无法传递_python中关于函数参数值传递的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux close 头文件,Linu
- 下一篇: python金融量化风险_【手把手教你】