Python賦值問題,python賦值問題?

2022-06-14 10:25:11 字數 4597 閱讀 5718

1樓:浩星辰錕

您好,因為您要使用for迴圈過一遍each_list,並且不能使用number = each_list[0]這樣的賦值語句,根據您的要求,有如下程式完全符合您的要求,只是有一點麻煩,除錯過程中記得先定義好number, year, model, speed四個全域性變數:

def number(i):

global number

number = i

def year(i):

global year

year = i

def model(i):

global model

model = i

def speed(i):

global speed

speed = i

each_list = ["100", "2012", "34a", "390"]

dic =

for i in each_list:

dic[each_list.index(i)](i)print number, year, model, speed

2樓:

number, year, model, speed = each_list

這個本質還是和number = each_list[0]一樣的。

3樓:匿名使用者

直接用多賦值:

number, year, model, speed = each_list

python賦值問題?

4樓:陽光的雷咩咩

你說的這個現象可能是動態語言特有的

在靜態語言裡比如c,c#,你宣告瞭int a = 10; 再 a = 20; 是不會重新建立一個地址的

而python沒有單獨的型別宣告語句,所以你每次賦值都會新建這也正式python之所以強大的一個方面比如下面的語句也是合法的a = 10

a = 'xyz'

如果你要用同一個地址 那型別都不相容了

但python允許 就給了程式設計師靈活性

5樓:一顆程式猿

python中的資料型別分為可變(mutable)和不可變(immutable)兩種

list是可變的, 因此在賦值的時候相當於多了一份引用, 你對lst2的改變會影響到lst1

而數值型是不可變的, 所以當b=a, 他們指向的是相同的東西(這時的id是一樣的), 但是當重新賦值的時候, 由於它們指向的物件是不可變的, 因此python就會重新建立一個物件並賦值給他, 你可以試試這樣:

a = 10

print(id(a))

a = 20

print(id(a))

雖然就是改變了一下a的值,但實際上是重新建立了一個物件, 因為整型物件一旦建立出來是不能被修改的

6樓:匿名使用者

你漏了另一個知識點:可變變數和不可變變數。

數值屬於不可變變數,比如數值1,一個程式中,記憶體中只用一個地址來儲存它,不管有多少個變數,賦值為1,都只是指向這個變數。

變數重新賦值,只是把指向變更了,

python賦值問題

7樓:盜墓者

引用就是指向的意思。

python的賦值不是真正意義上的賦值,比如a=1,就是將變數a指向常量1,相當於在常量1上貼了一個標籤a。

然後b=[1,2],也是一樣的指向,把b指向列表資料[1,2],但[1,2]由於是可變物件,即可以變成[1]或者其他,但是快取裡的id不變的,所以b指向的就成了新的列表資料[1]。

其實意義不大,不用那麼糾結,在實際開發中這個和其它開發語言沒多大區別,口頭上還是說的賦值,並沒有說引用或者指向,知道這個原理就行

8樓:匿名使用者

就是說賦值時,如果物件是可變的,那麼這個變數就是這個物件的一個引用,等號兩邊指向的是同一個物件,改變其中一個,另一個變數也改變了

python賦值問題

9樓:匿名使用者

不用再糾結輸入的數字用什麼函式去轉換了,不管int還是float或者其他數字型別,直接用eval通殺

10樓:匿名使用者

讀讀文件,就能發現錯誤的原因了:

b = int('3.5')不符合函式對引數的規定,試試換成b=float('3.5'):

c語言指標的賦值問題

11樓:大野瘦子

指標在用要注意初始化,例如:

int *p;

p為指標,地址是未知的,如果直接賦值

*p=a;這樣編譯可以通過,但是會產生警告,p的地址是隨機分配的,這樣對未知的地址賦值很危險,可能會覆蓋掉某些重要資料,所以避免這種危險,在定義指標時注意初始化,也就是賦值。

可以int *p=&a;

或者int *p;

p=&a;

然後再對p進行操作

有錯。注意大小寫,還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

指標的賦值

int *p;

int a;

int b[1];

p = &a;

p = b;

指標的賦值,「=」的左運算元能夠是*p,也能夠是p。

當「=」的左運算元是*p時,改變的是p所指向的地址存放的資料;

當「=」的左運算元是p時,改變的是p所指向的地址。

陣列的變數名b表示該陣列的首地址,因此p=b;也是正確的

同型別的指標賦值:

int val1 = 18,val2 = 19;

int *p1,*p2;

p1 = &val1;

p2 = &val2;

p1 = p2;   //注意啦,p1指向了val2,而沒有指向val1

備註:字串與指標的初始化和賦值

初始化:

char *cp = "abcdefg"; //這個初始化過程,是將指標cp指向字串的首地址,而並非傳遞字串的值。由於,在c語言裡面,沒有總體處理一個字串的機制

賦值:cp = "abcdefg";

*cp=」abcdefg」 ;//錯誤!字串常量傳遞的是它的首地址,不能夠通過*cp改動該字串的值,由於該字串為常量,而它僅僅是簡單的將指標指向該字串常量。

12樓:林聲飄揚

有錯注意:用指標變數前,必須對指標變數賦值如:int i, *p1;

p1=&i;

再如:int a, b;

int *p1, *p2;

*p1=10; *p2=100;

但指標變數未賦值,即指標指向未知地址,這樣是錯誤的因此:絕對不能對未賦值的指標變數作「指向」運算。

int a=9,b;

int *p=&b;//必須加上這一句

*p=a;

*p=8;

這樣就不會產生錯誤

13樓:匿名使用者

注意大小寫!還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

14樓:七先生是遊戲鬼才

這個還是比較複雜的,你可以學習一下

15樓:匿名使用者

p=&a//把a的地址給指標p

16樓:匿名使用者

語法上沒錯,但可能出現警告,破壞程式其他資料

17樓:渾濃強浩然

p就是一個指標,他指向一個地址,而&p就是p剛才所指向的具體地址,*p是p指向地址裡面的東西。也就是值。*p=&a的意思是把a的地址給了*p,這樣的話p就指向

(指向a的地址)的地址。對指標賦值必須是int*p=null;或者int

*p;p=null。

python賦值問題

18樓:匿名使用者

我是這麼理解的。

x,y,z=1,2,3 其實這是元組賦值,可以寫成(x,y,z=1,2,3),對應位置的變數獲得對應的值。

其中需要說明的是1,2,3是物件,x,y,z是引用。

在執行x,y=y,x時,y,x這個元組其實已經被轉換為2,1了,然後直行賦值後,引用x指向了物件2,引用y指向了物件1。例如:

>>> x,y,z=1,2,3

>>> id(x)

3508720

>>> id(y)

3508708

>>> id(z)

3508696

>>> x,y=y,x

>>> id(x)

3508708

>>> id(y)

3508720

>>>

19樓:匿名使用者

是c語音編寫的嗎?

#include

void main()

這樣的話xy的值沒有交換啊!依舊是123的值哦

簡單python問題,求教,簡單的python問題求教!

func k k表示可變引數,通 過可變引數實現類似於過載的方法。通常我們要定義一個函回數的時候,必須要預 答先定義這個函式需要多少個引數 或者說可以接受多少個引數 一般情況下這是沒問題的,但是也有在定義函式的時候,不能知道引數個數的情況。例如 def func a,b,c print a prin...

關於python的簡單問題,關於python的一個簡單問題

我覺得,你想實現你的邏輯,需要用的是while,而不是用if else,不管輸入幾次錯誤值,用while控制會好點 關於python網路爬蟲的一個簡單問題 你用的是python2,所以才會有這種編碼問題簡單一點的話 你拿python3重寫一下就行了。如果改的話,在表頭定義一下你要輸出的編碼,編碼定義...

關於Python中sort函式賦值的問題

python中的sort 方法用於陣列排序,本文以例項形式對此加以詳細說明 一 基本形式 列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。123x 4,6,2,1,7,9 x.sort print x 1,2,4,6,7,9 如果需...