Python 有哪些好玩的語法糖?

時間 2021-05-06 04:32:23

1樓:譚菜根

題主舉例 c = [b, a][a > b] 主要是實現三元運算子,取 a、b 中較大的那個,還有一種寫法是 c = a > b and a or b。其實兩種方法都不太直觀,還是老辦法簡單易懂:c = a if a > b else b。

2樓:朱小霖

這兩天工作的時候遇到了乙個,大致用法是這樣:

names=[

"tom"

,"jerry"

]for

name

innames:if

check(x

):do(x

)break

else

:print

("no qualified name"

)就是在迴圈後面可以直接加else,如果迴圈break了,就不會執行else。

3樓:facert

functools.partial 偏函式

import socket

import functools

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

conn = s.connect(('localhost', 80))

msgs =

# 普通寫法

while True:

msg = coon.recv(1024)

elsebreak

# iter and functools.partial 的寫法

for msg in iter(functools.partial(conn.recv, 1024), b''):

2. 閉包(Closure)

def create_fun(num):

def fun_bound(f, *argsreturn fun(f, *args, key=num)

return fun_bound

temp = create_fun(10)

c = temp(ff, 1)

print c

4樓:Softmax

合併兩個dictionary, 並且合併重複元素。

a=b=

print dict(a,**b)

把巢狀的list攤平(僅限兩層)

a=[[1,2],[3,4]]

print sum(a,)

[1, 2, 3, 4]

5樓:

import pprint

message = 'It was a bright cold day in April,and the clocks were string thirteen.'

count = {}

for character in message:

count.setdefault(character,0)count[character] = count[character] + 1

pprint.pprint(count)

列印的效果如下: (pprint 不知道算不算語法糖,剛從乙個電子書的看到的)

6樓:岳飛

composable function

In math, (f * g) (x) = f(g(x)). This is called function composition.

# this transfer a map object to list

lmap = compose(list, map)

# lmap equivalent to `list(map(...))`

lmap(lambda x: x ** 2, range(10))

Let's try some math.

f(x) = x^2 + 1

g(x) = 2x - 1

h(x) = -2x^3 + 3

We want to represent f * g * h in a program, i.e. fn(x) = f(g(h(x)))

f = lambda x: x**2 + 1

g = lambda x: 2*x - 1

h = lambda x: -2 * x**3 + 3

fn = compose(f, g, h)

fn(5) # 245026

7樓:劉奕聰

用 frozenset 來定義常量。

frozenset 是一種很少用的內建的資料型別,用來構造乙個不可變的集合。

假設我們有以下函式用來宣告乙個配置項:

declare

(option

,default

)此函式有如下行為:

如果指定了 default,配置檔案中沒有配置的 option 預設為 default;

如果沒有指定 default,則將 option 視為必填項,需要在配置檔案中明確指定;

現在我們來思考沒有指定 default 到底是什麼意思。

是declare(option, None)?

顯然不是,對於很多配置項,None 往往是個有意義的值。

或者是省略 default 的值:declare(option)?

這種方式一般有兩種實現:

判斷是否有第二個引數(即 args 是否是空):def declare(option, *args);

給 default 設定個沒有意義的預設值;

第一種處理起來很繁瑣,還要處理命名引數,而且後期難以增加引數。

第二種會優雅一些,但是我們需要考慮什麼樣的預設值才是沒有意義的值。

所以我們可以這樣用 frozenset:

undefined

=frozenset

()宣告了乙個 undefined 常量後作為 default 的預設值:

defdeclare

(option

,default

=undefined

):pass

frozenset 沒有快取,除了引用再也沒有其他方式再構造出乙個同樣的物件,換句話說,對於配置檔案來說,這個 undefined 是乙個約束項

還有個額外的好處是我們能夠控制 frozenset 對應的布林值:

nan=

frozenset

()bool

(nan

)# False

bool

(float

("nan"

))# True

foo=

frozenset

(["foo"

])bool

(foo

)# True

frozenset 不需要引入包,在 Python2 和 Python3 都能直接使用。

8樓:

for else語法

for裡面如果沒有觸發break,就執行else部分,否則,就略過else部分。

這個語法糖省去了定義變數flag。想想如果用cpp怎麼寫吧。

9樓:karajan1001

我來說乙個迴圈中的。

python中的最常見的for迴圈是沒有下標的。

a_list=[

'a',

'b',

'c',

'd']

form

ina_list

:print(m

)abc

d如果要在迴圈中引用list中的其他元素會比較麻煩。

乙個可行的方法是使用enumerate返回list的元素和list的標號,然後通過呼叫類似a_list[num + 1]的方法引用其他元素。

a_list=[

'a',

'b',

'c',

'd']

fornum,m

inenumerate

(a_list

):print

(num,m

)0 a

1 b2 c

3 d用上述方法需要注意考慮邊界條件。直接通過編號呼叫list的元素不是乙個很優雅的事情。

所以我一般採用另乙個的解決方案,使用zip將序列和自身位移後的序列打包。

a_list=[

'a',

'b',

'c',

'd']

new_list

=zip

(a_list

,a_list[1

:])form,

next_m

innew_list

:print(m

,next_m

)a b

b cc d

10樓:馭風者

根據網上的教程總結了一篇文章,裡面有不少例子,可以看看https://

zhuanlan /p/25

892022

11樓:BrieflyX

個人覺得題主這種寫法不好,還不如c = max(a, b)這種來得簡潔明瞭。

用的最多的當然是生成器推導式,列表推導式,字典推導式。基本上基於序列的操作都可以囊括在內了。

12樓:杜洛瓦

from

collections

import

Countera=

[1,1

,1,1

,1,2

,3,3

,3,4

,4,4

,4,5

,6,6

,6,7

,8]a_count

=Counter(a

)print

(a_count

)# output

# Counter()

names=[

'alice'

,'bob'

,'bob'

,'candice'

,'candice'

]names_count

=Counter

(names

)print

(names_count

)# output

# Counter()

非常實用的計數功能,畫histogram 必備,誰用誰知道。

13樓:火鍋大魔王

def a(lst):

If len(lst) != 0:

return lst

else:

return "error lst"

def b(lst):

return lst or "error lst"

14樓:靈劍

Python3.6抄襲PHP的乙個語法

f'SELECT * FROM mytable WHERE name="" and age > '

我已經看到大量XSS和SQL注入漏洞被寫出來的未來了

15樓:

把點座標拆成兩個list,matpotlib有的時候畫圖很有用

例如(x1,y1),(x2,y2),...變成(x1,x2,x3....)和(y1,y2,y3,...)

x,y=zip(*original_list)

自然語言中有哪些有趣的「語法糖」?

configex if 山東方言裡的 倒裝句 實質上允許了語言元素的亂序動態載入。例如 你吃飯了嗎晚上 如果句子開頭的詞句一時想不起來,不必卡殼 阻塞 可以先說後邊的,再說前邊的。這樣可以減少阻塞時間,提高資訊傳遞效率。用程式語言模擬的話,允許語句順序變換但語義不受影響,大概類似於允許先呼叫後宣告?...

《Django的語法糖》譯自《Tango with Django》(第一章)

小技術 1 鐵路線路的起撥改是鐵道工務系統最常見的養護工作。我們知道,軌道的方向和水平對機車及車輛的安全執行意義重大,所以高鐵 客專常常使用混凝土整體道床和75鋼軌。2 看方向 水平的技巧和 公子恒恒說的差不多,不過看水平的要把臉貼在軌面上,這樣視線和櫃面基本處於同乙個水平線上,可以更好的看到小坑 ...

有哪些好玩的句子?

北街貓小七 腔的熱血步入這個社會,摸爬滾打身心疲憊 當你發現收入太低買啥都貴,千萬不要因此而變的頹廢 要相信你有用的本事不回作廢,加油 現在開始起飛 心不由己 這個時代的青年,能夠把自己安排對了的很少。越聰明的人,越容易有慾望,越不知應在哪個地方擱下那個心。心實在應該擱在當下的。可是聰明的人,老是擱...