30個(gè)神奇的Python技巧來(lái)編寫(xiě)更好的代碼
使用Python技巧將您的邏輯轉(zhuǎn)換為更優(yōu)雅的代碼
Python因其代碼的簡(jiǎn)單性和可讀性而成為一種非常流行的語(yǔ)言。 它是您選擇的最簡(jiǎn)單的語(yǔ)言之一。 如果您是python基本概念的初學(xué)者,那么這是學(xué)習(xí)編寫(xiě)更好代碼的最佳時(shí)間。
python中有許多技巧可以比以前更好地改善程序。 本文將幫助您了解python中可用的各種技巧。 不斷地練習(xí)它們,直到成為您編程習(xí)慣的一部分。
技巧01-變量的多重分配
Python允許我們?cè)谝恍兄袨槎鄠€(gè)變量分配值。 可以使用逗號(hào)分隔變量。 一線(xiàn)多任務(wù)有很多好處。 它可用于為多個(gè)變量分配多個(gè)值或?yàn)閱蝹€(gè)變量名稱(chēng)分配多個(gè)值。 讓我們做一個(gè)問(wèn)題陳述,其中我們必須將值50和60分配給變量a和b。 常規(guī)代碼如下所示。
- a = 50
- b = 60
- print(a,b)
- print(type(a))
- print(type(b))
輸出量
- 50
- 60
- <class 'int'>
- <class 'int'>
條件I-值等于變量
當(dāng)變量和多個(gè)賦值相等時(shí),每個(gè)值將存儲(chǔ)在所有變量中。
- a , b = 50 , 60
- print(a,b)
- print(type(a))
- print(type(b))
輸出量
- 50
- 60
- <class 'int'>
- <class 'int'>
這兩個(gè)程序給出相同的結(jié)果。 這是使用一個(gè)行值分配的好處。
條件II-值大于變量
讓我們嘗試增加上一個(gè)程序中的值數(shù)量。 可以將多個(gè)值分配給單個(gè)變量。 在為變量分配多個(gè)值時(shí),我們必須在變量名稱(chēng)前使用星號(hào)。
- a , *b = 50 , 60 , 70
- print(a)
- print(b)
- print(type(a))
- print(type(b))
輸出量
- 50
- [60, 70]
- <class 'int'>
- <class 'list'>
第一個(gè)值將分配給第一個(gè)變量。 第二個(gè)變量將從給定值中收集值。 這將創(chuàng)建一個(gè)列表類(lèi)型對(duì)象。
條件III-多變量一個(gè)值
我們可以為多個(gè)變量分配一個(gè)值。 每個(gè)變量將使用等號(hào)分隔。
- a = b = c = 50
- print(a,b,c)
- print(type(a))
- print(type(b))
- print(type(c))
輸出量
- 50 50 50
- <class 'int'>
- <class 'int'>
- <class 'int'>
技巧02-交換兩個(gè)變量
交換是彼此交換兩個(gè)變量的值的過(guò)程。 這在計(jì)算機(jī)科學(xué)的許多操作中可能很有用。 在這里,我編寫(xiě)了兩種主要的方法供程序員用來(lái)交換值以及最佳解決方案。
方法I-使用臨時(shí)變量
此方法使用臨時(shí)變量存儲(chǔ)一些數(shù)據(jù)。 以下代碼使用臨時(shí)變量名編寫(xiě)。
- a , b = 50 , 60
- print(a,b)
- temp = a+b
- #a=50 b=60 temp=110
- b = a
- #a=50 b=50 temp=110
- a = temp-b
- #a=60 b=50 temp=110
- print("After swapping:",a,b)
輸出量
- 50 60
- After swapping: 60 50
方法II-不使用臨時(shí)變量
以下代碼在不使用臨時(shí)變量的情況下交換了變量。
- a , b = 50 , 60
- print(a,b)
- a = a+b
- #a=110 b=60
- b = a-b
- #a=110 b=50
- a = a-b
- #a=60 b=50
- print("After swapping:",a,b)
輸出量
- 50 60
- After swapping: 60 50
方法III-Python中的優(yōu)秀解決方案
這是使用python交換變量的另一種方法。 在上一節(jié)中,我們了解了多個(gè)分配。 我們可以使用交換的概念。
- a , b = 50 , 60
- print(a,b)
- a , b = b , a
- print("After swapping",a,b)
輸出量
- 50 60
- After swapping 60 50
技巧03-反轉(zhuǎn)字符串
還有另一個(gè)很酷的技巧可以在python中反轉(zhuǎn)字符串。 用于反轉(zhuǎn)字符串的概念稱(chēng)為字符串切片。 可以在變量名稱(chēng)后使用符號(hào)[::-1]反轉(zhuǎn)任何字符串。
- my_string = "MY STRING"
- rev_string = my_string[::-1]
- print(rev_string)
輸出量
- GNIRTS YM
技巧04-在一行中拆分單詞
將單詞分割成一行不需要特殊的算法。 為此,我們可以使用關(guān)鍵字split()。 在這里,我寫(xiě)了兩種分割單詞的方法。
方法一-使用迭代
- my_string = "This is a string in Python"
- start = 0
- end = 0
- my_list = []
- for x in my_string:
- end=end+1
- if(x==' '):
- my_list.append(my_string[start:end])
- start=end+1
- my_list.append(my_string[start:end+1])
- print(my_list)
輸出量
['This ', 'is ', 'a ', 'string ', 'in ', 'Python']
方法II-使用分割功能
- my_string = "This is a string in Python"
- my_list = my_string.split(' ')
- print(my_list)
輸出量
- ['This ', 'is ', 'a ', 'string ', 'in ', 'Python']
技巧05-將單詞列表排成一行
這與上一個(gè)過(guò)程相反。 在這一部分中,我們將使用join函數(shù)將單詞列表轉(zhuǎn)換為單行。 下面給出了使用join函數(shù)的語(yǔ)法。
語(yǔ)法:"" .join(string)
- my_list = ['This' , 'is' , 'a' , 'string' , 'in' , 'Python']
- my_string = " ".join(my_list)
輸出量
- This is a string in Python
技巧06-多次打印字符串
我們可以使用乘法運(yùn)算符多次打印字符串。 這是重復(fù)字符串的非常有效的方法。
- n = int(input("How many times you need to repeat:"))
- my_string = "Python\n"
- print(my_string*n)
輸出量
- How many times you need to repeat:3
- PythonPythonPython
技巧07-使用加法運(yùn)算符連接兩個(gè)字符串
可以在不使用join函數(shù)的情況下連接各種字符串。 我們可以只使用加法運(yùn)算符(+)來(lái)執(zhí)行此操作。
- a = "I Love "
- b = "Python"
- print(a+b)
輸出量
- I Love Python
技巧08-多個(gè)條件運(yùn)算符
兩個(gè)可以在程序中組合兩個(gè)或多個(gè)條件運(yùn)算符,我們可以使用邏輯運(yùn)算符。 但是,通過(guò)鏈接運(yùn)算符可以得到相同的結(jié)果。 例如,如果我們需要在變量的值大于10且小于20時(shí)打印某些內(nèi)容,則代碼將類(lèi)似于以下內(nèi)容。
- a = 15
- if (a>10 and a<20):
- print("Hi")
取而代之的是,我們可以將條件運(yùn)算符組合成單個(gè)表達(dá)式。
- a = 15
- if (10 < a < 20):
- print("Hi")
輸出量
- Hi
技巧09-在列表中查找最頻繁的元素
在列表中大部分時(shí)間出現(xiàn)的元素,然后將成為列表中最頻繁出現(xiàn)的元素。 以下代碼段將幫助您從列表中獲取最頻繁的元素。
- my_list = [1,2,3,1,1,4,2,1]
- most_frequent = max(set(my_list),key=my_list.count)
- print(most_frequent)
輸出量
- 1
技巧10-查找列表中所有元素的出現(xiàn)
先前的代碼將提供最頻繁的值。 如果我們需要知道列表中所有唯一元素的出現(xiàn),則可以使用收集模塊。 該集合是python中一個(gè)很棒的模塊,它提供了強(qiáng)大的功能。 Counter方法提供具有元素和出現(xiàn)對(duì)的字典。
- from collections import Counter
- my_list = [1,2,3,1,4,1,5,5]
- print(Counter(my_list))
輸出量
- Counter({1: 3, 5: 2, 2: 1, 3: 1, 4: 1})
技巧11-檢查兩個(gè)字符串的字謎
如果一個(gè)字符串由另一字符串中的字符組成,則兩個(gè)字符串是字謎。 我們可以在collections模塊中使用相同的Counter方法。
- from collections import Counter
- my_string_1 = "RACECAR"
- my_string_2 = "CARRACE"
- if(Counter(my_string_1) == Counter(my_string_2)):
- print("Anagram")
- else: print("Not Anagram")
輸出量
- Anagram
技巧12-創(chuàng)建帶范圍的數(shù)字序列
函數(shù)range()對(duì)于創(chuàng)建數(shù)字序列很有用。 在許多代碼片段中,它可能很有用。 范圍函數(shù)的語(yǔ)法在此處編寫(xiě)。
語(yǔ)法:range(開(kāi)始,結(jié)束,步長(zhǎng))
讓我們嘗試創(chuàng)建一個(gè)偶數(shù)列表。
- my_list = list(range(2,20,2))
- print(my_list)
輸出量
- [2, 4, 6, 8, 10, 12, 14, 16, 18]
技巧13-多次重復(fù)元素
與字符串乘法相似,我們可以使用乘法運(yùn)算符創(chuàng)建一個(gè)多次填充元素的列表。
- my_list = [3]
- my_list = my_list*5
- print(my_list)
輸出量
- [3, 3, 3, 3, 3]
技巧14-在三元運(yùn)算符中使用條件
在大多數(shù)情況下,我們?cè)赑ython中使用嵌套的條件結(jié)構(gòu)。 除了使用嵌套結(jié)構(gòu),還可以在三元運(yùn)算符的幫助下替換一行。 語(yǔ)法在下面給出。
語(yǔ)法:if True then Statement1 else Statement2
- if age > 20 then age = 25, print("czz")else print("不合格")
輸出量
- 合格
技巧15-使用Python列表推導(dǎo)表達(dá)式
列表推導(dǎo)表達(dá)式是從另一個(gè)列表創(chuàng)建列表的一種非常緊湊的方法。 看下面的代碼。 第一個(gè)是使用簡(jiǎn)單的迭代編寫(xiě)的,第二個(gè)是使用列表理解的。
- square_list = []
- for x in range(1,10):
- temp = x**2 square_list.append(temp)
- print(square_list)
輸出量
- [1, 4, 9, 16, 25, 36, 49, 64, 81]
使用列表推導(dǎo)表達(dá)式
- square_list = [x**2 for x in range(1,10)]
- print(square_list)
輸出量
- [1, 4, 9, 16, 25, 36, 49, 64, 81]
技巧16-將可變項(xiàng)轉(zhuǎn)換為不可變項(xiàng)
函數(shù)frozenset()用于將可變的可迭代對(duì)象轉(zhuǎn)換為不可變對(duì)象。 使用此方法,我們可以?xún)鼋Y(jié)對(duì)象的值更改。
- my_list = [1,2,3,4,5]
- my_list = frozenset(my_list)
- my_list[3]=7
- print(my_list)
輸出量
- Traceback (most recent call last): File "<string>", line 3, in <module>TypeError: 'frozenset' object does not support item assignment
當(dāng)我們將frozenset()函數(shù)應(yīng)用于列表時(shí),項(xiàng)目分配受到限制。
技巧17-用floor和Ceil四舍五入
Floor和Ceil是數(shù)學(xué)函數(shù),可用于浮點(diǎn)數(shù)。 floor函數(shù)返回的整數(shù)小于浮點(diǎn)數(shù),而ceil函數(shù)返回的整數(shù)大于浮點(diǎn)數(shù)。 要使用此功能,我們必須導(dǎo)入數(shù)學(xué)模塊。
- import math
- my_number = 18.7
- print(math.floor(my_number))
- print(math.ceil(my_number))
輸出量
- 1819
技巧18-返回布爾值
有時(shí)我們必須通過(guò)檢查某些參數(shù)的條件來(lái)返回布爾值。 代替編寫(xiě)if語(yǔ)句,我們可以直接返回條件。 以下程序?qū)a(chǎn)生相同的輸出。
方法I-使用其他條件
- def function(n):
- if(n>10):
- return True
- else: return False
- n = int(input())
- if(function(n)):
- print("Eligible")
- else:
- print("Not Eligible")
方法II-無(wú)其他條件
- def function(n):
- return n>10
- n = int(input())
- print("Eligible") if function(n) else print("Not Eligible")
輸出量
- Eligible
技巧19-一行創(chuàng)建函數(shù)
Lambda是python中的匿名函數(shù),可在一行中創(chuàng)建函數(shù)。 這里給出了使用lambda函數(shù)的語(yǔ)法。
語(yǔ)法:lambda 參數(shù):表達(dá)式
- x = lambda a,b,c : a+b+c
- print(x(10,20,30))
輸出量
- 60
技巧20-將功能應(yīng)用于列表中的所有元素
map是一個(gè)高階函數(shù),它對(duì)列表中的所有元素應(yīng)用特定功能。
語(yǔ)法:map(函數(shù),可迭代)
- my_list = ["felix", "antony"]
- new_list = map(str.capitalize,my_list)
- print(list(new_list))
輸出量
- ['Felix', 'Antony']
技巧21-將Lambda與map功能配合使用
該函數(shù)可以用python中的lambda函數(shù)替換。 創(chuàng)建以下程序以創(chuàng)建數(shù)字列表的平方。
- my_list = [1, 2, 3, 4, 5]
- new_list = map(lambda x: x*x, my_list)
- print(list(new_list))
輸出量
- [1, 4, 9, 16, 25]
技巧22-從函數(shù)返回多個(gè)值
python函數(shù)可以返回多個(gè)值,而無(wú)需任何額外的需要。 我們可以通過(guò)用逗號(hào)分隔它們來(lái)返回值。
- def function(n):
- return 1,2,3,4
- a,b,c,d = function(5)
- print(a,b,c,d)
輸出量
- 1 2 3 4
技巧23-使用filter函數(shù)過(guò)濾值
filter函數(shù)用于過(guò)濾可迭代對(duì)象中的某些值。 filter函數(shù)的語(yǔ)法如下。
語(yǔ)法:filter(函數(shù),迭代)
- def eligibility(age):
- return age>=24
- list_of_age = [10, 24, 27, 33, 30, 18, 17, 21, 26, 25]
- age = filter(eligibility, list_of_age)
- print(list(age))
輸出量
- [24, 27, 33, 30, 26, 25]
技巧24-用Python合并兩個(gè)字典
在python中,我們可以合并兩個(gè)字典,而無(wú)需任何特定方法。 下面的代碼是合并兩個(gè)字典的示例。
- dict_1 = {'One':1, 'Two':2}
- dict_2 = {'Two':2, 'Three':3}
- dictionary = {**dict_1, **dict_2}
- print(dictionary)
輸出量
- {'One': 1, 'Two': 2, 'Three': 3}
技巧25-獲取對(duì)象的大小
內(nèi)存大小根據(jù)對(duì)象的類(lèi)型而變化。 我們可以使用sys模塊中的getsizeof()函數(shù)獲取對(duì)象的內(nèi)存。
- import sys
- a = 5
- print(sys.getsizeof(a))
輸出量
- 28
竅門(mén)26-將兩個(gè)列表組合成字典
郵編功能在python中有很多優(yōu)點(diǎn)。 使用zip函數(shù),我們可以從兩個(gè)列表創(chuàng)建字典。
- list_1 = ["One","Two","Three"]
- list_2 = [1,2,3]
- dictionary = dict(zip(list_1, list_2))
- print(dictionary)
輸出量
- {'Two': 2, 'One': 1, 'Three': 3}
技巧27-計(jì)算程序的執(zhí)行時(shí)間
時(shí)間是python中另一個(gè)有用的模塊,可用于計(jì)算執(zhí)行時(shí)間。
- import time
- start = time.clock()
- for x in range(1000):
- pass
- end = time.clock()
- total = end - start
- print(total)
輸出量
- 0.00011900000000000105
技巧28-刪除列表中的重復(fù)元素
發(fā)生多次的元素稱(chēng)為重復(fù)元素。 我們可以使用類(lèi)型轉(zhuǎn)換簡(jiǎn)單地刪除重復(fù)的元素。
- my_list = [1,4,1,8,2,8,4,5]
- my_list = list(set(my_list))
- print(my_list)
輸出量
- [8, 1, 2, 4, 5]
技巧29-用python打印月歷
日歷模塊具有許多與基于日期的操作有關(guān)的功能。 我們可以使用以下代碼打印每月日歷。
- import calendar
- print(calendar.month("2020","06"))
輸出量
- June 2020
- Mo Tu We Th Fr Sa Su
- 1 2 3 4 5 6 7
- 8 9 10 11 12 13 14
- 15 16 17 18 19 20 21
- 22 23 24 25 26 27 28
- 29 30
技巧30-使用zip功能進(jìn)行迭代
zip函數(shù)允許使用循環(huán)迭代多個(gè)可迭代的過(guò)程。 在下面的代碼中,兩個(gè)列表同時(shí)被迭代。
- list_1 = ['a','b','c']
- list_2 = [1,2,3]
- for x,y in zip(list_1, list_2):
- print(x,y)
輸出量
- a 1b 2c 3
總結(jié)思想
希望您喜歡這篇文章。 最后,您必須了解學(xué)習(xí)技巧不是必須的。 但是,如果這樣做,您將在其他程序員中獨(dú)樹(shù)一幟。 必須持續(xù)練習(xí)才能流利地編碼。 感謝您閱讀本文。 您可以在中等水平上關(guān)注我。
編碼愉快!