python中的賦值、條件、循環(huán)等語句

本文所記述的是一些基礎知識點中平時用的比較少的方法。

一、賦值魔法

1.不對等賦值

當賦值符號左右兩端長度不相等時,可以使用(*)來收集多余的值。

>>> a, b, *rest = [1, 2, 3, 4]
>>> rest
[3, 4]

這個星號(*)也可以放在其他位置。

>>> name = "Albus Percival Wulfric Brian Dumbledore"
>>> first, *middle, last = name.split()
>>> middle
['Percival', 'Wulfric', 'Brian']

2.鏈式賦值

即:x = y = 'abc',但是個人不提倡這種方法,除非已經明確x和y互為引用。

二、條件語句

1.是否“相等”

注意“==”運算符和“is”的差別(!=與is not同理)的差別,前者表示值相等,后者表示為同一對象(地址相等)。

2.斷言

斷言assert的作用是為了讓程序在錯誤條件出現(xiàn)時立即崩潰以防止發(fā)生進一步的錯誤。斷言語句的后面可以接續(xù)說明性的字符串,例如:

>>> age = -1 
>>> assert 0 < age < 100, 'The age must be realistic' 
Traceback (most recent call last):  
   File "<stdin>", line 1, in ? 
AssertionError: The age must be realistic

三、循環(huán)語句

1.遍歷字典

字典可以作為可迭代對象進行遍歷,通常有兩種方式,對于以下字典:

d = {'x': 1, 'y': 2, 'z': 3} 
# 方法1
for key in d:  
   print(key, 'corresponds to', d[key])
# 方法2
for key, value in d.items(): 
   print(key, 'corresponds to', value)

2.迭代時獲取索引

使用下標list[i]的方法也能達到相同的目的,但是手法略顯笨拙??梢允褂胑numerate獲取列表index:

for index, element in enumerate(list):  
     if 'xxx' in element: 
         list[index] = '[censored]' 

3.簡單的列表推導式

個人認為為了便于閱讀,列表推導最好不要過于復雜。下面這個例子使用了兩層循環(huán)和條件判斷:

>>> girls = ['alice', 'bernice', 'clarice'] 
>>> boys = ['chris', 'arnold', 'bob'] 
>>> [b+'+'+g for b in boys for g in girls if b[0] == g[0]] 
['chris+clarice', 'arnold+alice', 'bob+bernice'] 

四、執(zhí)行存儲字符串中的python代碼

主要有exec和eval兩個方法,其中exec將執(zhí)行字符串中的python語句,而eval將計算(返回)字符串中包含的python語句的結果。

1.exec

最簡單的用法:

>>> exec("print('Hello, world!')") 
Hello, world!

但是,為了代碼安全性考慮,可以給exec指定第二個參數(shù),作為其命名空間,例如:

>>> exec('sqrt = 1', scope) 
>>> scope['sqrt'] 
1

這樣,exec所得到的結果就不會與math中的sqrt方法相沖突了。

2.eval

將字符串作為python代碼執(zhí)行兵計算結果:

>>> eval("2 * 3") 
6

eval也會有命名空間的問題,例如:

>>> scope = {} 
>>> scope['x'] = 2 
>>> scope['y'] = 3 
>>> eval('x * y', scope) 
6 

注:命名空間在形式和使用上可以理解為一個字典。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容