一写隶、變量
1.變量的聲明
python語言是動態(tài)語言
- 變量不需要事先聲明
- 變量的類型不需要聲明
1.1 變量的概念
每個變量在使用前都必須賦值赐纱,變量賦值以后該變量才會被創(chuàng)建。
在 Python 中,變量就是變量,它沒有類型榨婆,我們所說的 類型是變量所指的內存中對象的類型。
等號(=)用來給變量賦值褒侧。
等號(=)運算符左邊是一個變量名,等號(=)運算符右邊是其指向的具體的值良风。
a = 1
a = '千鋒'
1.2 變量的賦值
python 中使用等號 = 對變量進行賦值,。
等號左邊被稱為變量名闷供,等號右邊稱為變量的值烟央,確切的說是對象
n = 5
2. 變量命名規(guī)則
2.1變量命名整體規(guī)則
可以包含以下字符
- 大小寫字母(a-z,A-Z)
- 變量名區(qū)分大小寫(a 和 A 是不同的變量)
- 數字(0-9)
1a = 'hh'
//顯示語法錯誤
SyntaxError: invalid syntax
- 下劃線(_)
2.2變量命名整體規(guī)則
- 不要以單下劃線和雙下劃線開頭;如:_user或 __user
- 變量命名要易讀歪脏;如:user_name,而不是username
- 不用使用標準庫中(內置)的模塊名或者第三方的模塊名
不要用這些 Python 內置的關鍵字:
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
> 上面打印出來的數據在 Python 中被稱為列表疑俭, 列表是 Python中一種數據結構。關于數據結構婿失,后面的章節(jié)會詳細說明钞艇。
>列表的都是 Python3 中的關鍵字。
#可以使用一下方法驗證豪硅,返回 True 就是 Python 的關鍵字
>>> keyword.iskeyword('del')
True
>>>
3. 變量命的賦值與傳參
在 python 中究竟該如何正確理解變量的賦值過程呢哩照?
s = 'hello'
以上的變量賦值,應該說成把變量分配給對象更合理懒浮。
hello
這個字符串對象會在內存中先被創(chuàng)建飘弧,之后再把變量名 s
分配給這個對象。
所以要理解 Python 中的變量賦值砚著,應該始終先看
等號右邊
次伶。
對象是在右邊先被創(chuàng)建或者被獲取
,在此之后左邊的變量名才會被綁定到對象上稽穆,這就像為對象貼上了標簽冠王。
變量名本質上是對象的標簽或者說是對象的名字,當然一個對象可以有多個標簽或者名字
秧骑。
比如: 張三 和 小張 指的都是同一個人
請看下面的代碼示例:
a = 1
b = a
a = 2
print(b) # b 會是 ?
a = 1
時如下圖:
b = a
時如下圖:
a = 2
時如下圖:
上面的 b = a
我們稱它為 傳遞引用,此時對象會擁有兩個名稱(標簽) ,分別是 a
和 b
s1 = 'hello'
s2 = s1
print(s1 is s2)
------------------結果----------------------------
"H:\Python 筆記文件\venv\Scripts\python.exe" "H:/Python 筆記文件/src/變量.py"
True
4.變量的多元賦值
在 Python3 中你可以這樣給變量賦值
In [10]: a, b, c = 'abc'
In [11]: a
Out[11]: 'a'
In [12]: b
Out[12]: 'b'
In [13]: c
Out[13]: 'c'
-------------ipython模式-------
案例一
In [1]: s = 'abc'
In [2]: s= 'abc+.'
In [3]: a,b,c,d,e=s
In [4]: e
Out[4]: '.'
In [5]: b
Out[5]: 'b'
案例二
//星號表達式:執(zhí)行后講剩余定義量放入列表
In [8]: a,b,li = 'hello' , 'word' ,100, 200
In [10]: a,b,*li = 'hello' , 'word' ,100, 200
In [11]: li
Out[11]: [100, 200]
--------------丟棄部分賦值------------------
In [1]: a ,b,*_ = 'hello','word',100,200
In [2]: _
Out[2]: [100, 200]
In [3]: a
Out[3]: 'hello'
In [4]: _
Out[4]: 'hello' //只有當上次無查詢時才顯示丟棄值
-----------列表部分顯示-----------------
In [5]: a ,*b ,c = 'hello'
In [6]: b
Out[6]: ['e', 'l', 'l']
假如你需要對一個序列類型中的數據進行一一解開賦值夷家,那就需要等號左邊的變量名和序列類型數據中的元素個數相同。
這種多元賦值方式在 Python 中也可以稱為元組解包侵歇。
1 . 只要要其中的一部分
有時候,你可能只想解壓一部分吓蘑,丟棄其他的值惕虑。對于這種情況 Python 并沒有提供特殊的語法。 但是你可以使用任意變量名去占位磨镶,到時候丟掉這些變量就行了溃蔫。
In [22]: data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]
In [23]: _, shares, price, _ = data
In [24]: shares
Out[24]: 50
In [25]: price
Out[25]: 91.1
在這里必須保證你選用的那些占位變量名在其他地方沒被使用到。
這里采用了英文的短下劃線 _ 作為臨時變量名琳猫。
這樣懂行的人看到這個伟叛,就會知道在之后的代碼中將不會再次用到此變量。
2. 只要第一個
In [14]: s, *_ = ['shark', 18, 100]
In [15]: s
Out[15]: 'shark'
- 是 python3 中的一個表達式脐嫂,他可以把沒有明確指出元素搜集起來统刮。
可以稱它為 星號解壓語法
3. 只要最后一個
In [16]: *_, score = ['shark', 18, 100]
In [17]: score
Out[17]: 100
4. 要第一個,其他的都放到列表中
In [19]: name, *info = ['shark', 18, 100]
In [20]: name
Out[20]: 'shark'
In [21]: info
Out[21]: [18, 100]
值得注意的是上面解壓出的 info 變量永遠都是列表類型账千,不管解壓的數字的數量是多少(包括 0 個)
你可以試著把等號左邊的兩個調換一下位置_
5. 嵌套的也好使
In [28]: record = ('xiguatian', 50, 123.45, (12, 18, 2012))
In [29]: name, *_, (*_, year) = record
In [30]: name
Out[30]: 'xiguatian'
In [31]: year
Out[31]: 2012
6. 用于 字符串的分割
In [35]: line = 'nobody:x:99:99:Nobody:/:/sbin/nologin'
In [36]: name, * fields, sh = line.split(":")
In [37]: name
Out[37]: 'nobody'
In [38]: sh
Out[38]: '/sbin/nologin'
7. 解壓迭代元素為可變長元組的序列
records = [
('foo', 1, 2),
('bar', 'hello'),
('foo', 3, 4),
]
def do_foo(x, y):
print('foo', x, y)
def do_bar(s):
print('bar', s)
for tag, *args in records:
if tag == 'foo':
do_foo(*args)
elif tag == 'bar':
do_bar(*args)
-------------------執(zhí)行結果:----------------------
foo 1 2
bar hello
foo 3 4
5. Python 中對象(變量的值)都有三個特性
# 唯一標識侥蒙,是對象在內存中的整數表示形式,在 CPython 中可以理解為# 內存地址
# 可以用 id 這個函數查看
id(10) # 直接給一個對象
id(n) # 給你變量名
# 類型匀奏, 對象都有不同的類型鞭衩,用 type 這個函數查看
type(10)
type(n)
# 值,對象本身
10
案例展示
s1 = 'hello'
s2 =s1
idx = id(s1)
print(idx)
print(id(s2))
print(type(s1))
<class 'str'> //字符串類型