Python 初學(xué)者進(jìn)階的九大技能
時(shí)間:2020-08-11 08:40:31
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]對(duì)于初學(xué)者來(lái)說(shuō),Python是入門(mén)最簡(jiǎn)單的語(yǔ)言之一。但學(xué)了一陣子之后,你可能會(huì)覺(jué)得:為如此簡(jiǎn)單的操作寫(xiě)大量的代碼有些令人困惑。
原文:https://medium.com/better-programming/9-skills-that-separate-a-beginner-from-an-intermediate-python-programmer-8bbde735c246
1.初學(xué)者與中級(jí)程序員
1.解決問(wèn)題和提出問(wèn)題:
2.XY問(wèn)題:
“我需要從字符串中提取最后3個(gè)字符。”
“不,你不需要。只需文件擴(kuò)展名。”
def extract_ext(filename):
return filename[-3:]
print (extract_ext('photo_of_sasquatch.png'))
>>> png
def extract_ext(filename):
return filename.split('.')[-1]
print (extract_ext('photo_of_sasquatch.png'))
print (extract_ext('photo_of_lochness.jpeg'))
>>> png
>>> jpeg
os.path.splitext()
,點(diǎn)擊這里查看:os.path.splitext():https://www.geeksforgeeks.org/python-os-path-splitext-method/。
3.理解代碼為何起作用(或不起作用):
4. 使用字符串:
word = 'supergreat'
print (f'{word[0]}')
>>> s
print (f'{word[0:5]}')
>>> super
str()
所提供的內(nèi)容,但也可以不查看
str()
文檔繼續(xù)編程。查看函數(shù)或過(guò)程文檔可以通過(guò)調(diào)用?
help(str)
?或者
dir(str)
來(lái)實(shí)現(xiàn)。執(zhí)行此操作時(shí),你可能會(huì)發(fā)現(xiàn)一些并不知道的方法,也許你在查看
str()
時(shí),找到有個(gè)名叫?
endswith()
?的方法,或許能用在某處。
endswith()
?:
filenames = ['lochness.png' , 'e.t.jpeg' , 'conspiracy_theories_CONFIRMED.zip']
# 1: Using ENDSWITH
for files in filenames:
if files.endswith('zip'):
print(f'{files} is a zip file')
else:
print (f'{files} is NOT a zip file')
# 2: Using SPLIT
for files in filenames:
if files.split('.')[-1] == 'zip':
print(f'{files} is a zip file (using split)')
else:
print (f'{files} is NOT a zip file (using split)')
5.使用列表:
my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3, 'a' , 'n' , 'b']
for item in my_list:
print (f'current item: {item}, Type: {type(item)}')
print?(my_list.sort())
my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3 , 'a' , 33.3 , 'n' , 'b']
number_list = []
string_list = []
for item in my_list:
print (f'current item: {item}, Type: {type(item)}')
if not isinstance(item,str):
number_list.append(item)
else:
string_list.append(item)
my_list = string_list
my_list = [letter for letter in my_list if isinstance(letter,str)]
def get_numbers(input_char):
if not isinstance(input_char,str):
return True
return False
my_list = [1,2,3,'a','b','c']
check_list = filter(get_numbers, my_list)
for items in check_list:
print(items)
names = ['First' , 'Middle' , 'Last']
print(names[::-1])
>>> ['Last', 'Middle', 'First']
names = ['First' , 'Middle' , 'Last']
full_name = ' '.join(names)
print(f'Full Name:\n{full_name}')
>>> First Middle Last
6. 使用循環(huán):
greek_gods = ['Zeus' , 'Hera' , 'Poseidon' , 'Apollo' , 'Bob']
for index in range(0,len(greek_gods)):
print (f'at index {index} , we have : {greek_gods[index]}')
for name in greek_gods:
print (f'Greek God: {name}')
for index, name in enumerate(greek_gods):
print (f'at index {index} , we have : {name}')
7. 使用函數(shù)(并正確談?wù)摵瘮?shù)):
def print_list(input_list):
for each in input_list:
print(f'{each}')
print() #just to separate output
greek_gods = ['Zeus' , 'Hera' , 'Poseidon' , 'Apollo' , 'Bob']
grocery_list = ['Apples' , 'Milk' , 'Bread']
print_list(greek_gods)
print_list(grocery_list)
print_list(['a' , 'b' , 'c'])
def reverse_list(list_input):
return list_input[::-1]
my_list = ['a', 'b' , 'c']
print (reverse_list(my_list))
>>> ['c', 'b', 'a']
8.面向?qū)ο缶幊?/h3>
Python是一種面向?qū)ο蟮恼Z(yǔ)言,其強(qiáng)大之處在于對(duì)象。
將對(duì)象視為藍(lán)圖,如果使用藍(lán)圖,你可以創(chuàng)建該藍(lán)圖的實(shí)例。也就是說(shuō),你可以創(chuàng)建需要的多個(gè)藍(lán)圖實(shí)例,但不會(huì)損毀你使用的藍(lán)圖。
面向?qū)ο缶幊蹋∣OP)是一個(gè)龐大的話題,因此我們不會(huì)在本節(jié)中涵蓋所有你需要了解的內(nèi)容,但可以通過(guò)幾個(gè)簡(jiǎn)單的示例幫你入門(mén)。
如果你之前讀過(guò)面向?qū)ο缶幊痰南嚓P(guān)內(nèi)容,可能已經(jīng)厭倦了學(xué)生(student)類,但我們又來(lái)了。從定義一個(gè)名為student的類開(kāi)始,student會(huì)擁有一個(gè)名稱和一個(gè)subject_list:
class Student():
def __init__(self,name):
self._name = name
self._subject_list = []
如果想要?jiǎng)?chuàng)建一個(gè)student,可以像這樣將其分配給變量:
student1 = Student('Martin Aaberge')
如果需要更多student,可以使用同一個(gè)類并添加另外的姓名:
student2?=?Student('Ninja?Henderson')
student1
和
student2
都是student類的實(shí)例,它們共享同一個(gè)藍(lán)圖,但彼此之間并無(wú)關(guān)系。此時(shí),我們對(duì)學(xué)生們能做的不多,但我們確實(shí)增加了一個(gè)主題列表。要填充此列表,我們需要?jiǎng)?chuàng)建方法,你可以調(diào)用方法來(lái)實(shí)現(xiàn)與該類實(shí)例的交互。
我們更新:
class Student():
def __init__(self,name):
self._name = name
self._subject_list = []
def add_subject(self, subject_name):
self._subject_list.append(subject_name)
def get_student_data(self):
print (f'Student: {self._name} is assigned to:')
for subject in self._subject_list:
print (f'{subject}')
print()
這個(gè)類可以用于創(chuàng)建、編輯學(xué)生信息,并獲取我們存在其中的信息:
#create students:
student1 = Student('Martin Aaberge')
student2 = Student('Heidi Hummelvold')
#add subjects to student1
student1.add_subject('psychology_101')
student1.add_subject('it_security_101')
#add subject to student2
student2.add_subject('leadership_101')
#print current data on students
student1.get_student_data()
student2.get_student_data()
將類保存在單獨(dú)的文件中并導(dǎo)入主代碼的操作很常見(jiàn),在我們的案例中,我們會(huì)在student.py文件中創(chuàng)建一個(gè)
student
類,并將其導(dǎo)入我們的main.py文件(本案例中,它們都位于同一個(gè)文件夾中)。
from student import Student
student1 = Student('Martin')
student1.add_subject('biomechanics_2020')
student1.get_student_data()
? ??
9.尊重PEP
我們經(jīng)??吹饺藗?cè)趯?xiě)Python代碼時(shí)并不尊重PEP(Python增強(qiáng)提案:Python Enhancement Proposals),但我自己會(huì)尊重。
當(dāng)你在開(kāi)發(fā)環(huán)境中工作時(shí),遵守標(biāo)準(zhǔn)非常重要——如果不是PEP標(biāo)準(zhǔn),也至少要遵守公司的標(biāo)準(zhǔn)。PEP是代碼的一組準(zhǔn)則,下面是PEP-8的鏈接(https://www.python.org/dev/peps/pep-0008/),讀起來(lái)很棒。請(qǐng)確保你通讀過(guò)一次,了解大概內(nèi)容。
一個(gè)典型的案例是
snake_case
,Python是以
snake_case
來(lái)寫(xiě)的,這代表著我們用下劃線來(lái)區(qū)分詞組,即便大學(xué)里也會(huì)犯錯(cuò),因此別難過(guò),只要?jiǎng)e這樣做就行了。這樣寫(xiě)是對(duì)的:?
chocolate_cake?=?'yummy'
這樣是錯(cuò)的:
chocolateCake?=?'Yummy'
2、結(jié)論
入門(mén)是了不起的體驗(yàn),需要艱苦鉆研,但你的學(xué)習(xí)曲線急遽上升,用新的經(jīng)驗(yàn)填滿你。
也許新手狀態(tài)很難擺脫,了解你要關(guān)注什么是很困難的,下一步呢?也許本文將你向正確的方向推進(jìn)了一步,也許只是一堆你已經(jīng)知道的胡言亂語(yǔ)。如果你不確定下一步該做什么,不要害怕提問(wèn)。
確保你用好了那些比你更有經(jīng)驗(yàn)的人,對(duì)各種意見(jiàn)持開(kāi)放態(tài)度,看看哪些對(duì)你有用。
如果還沒(méi)準(zhǔn)備好使用某些編程方式,請(qǐng)繼續(xù)讓代碼能夠運(yùn)行,同時(shí)學(xué)些新的和更好的方法。
-END-
推薦閱讀
【01】TIOBE 8 月編程語(yǔ)言:C、Java 差距拉大,R 語(yǔ)言盛行
【02】單片機(jī)C語(yǔ)言,必知的數(shù)據(jù)存儲(chǔ)與程序編寫(xiě)知識(shí)!
【03】C語(yǔ)言之父:因拒付論文裝訂費(fèi)錯(cuò)失博士學(xué)位,論文52年后重見(jiàn)天日
【04】C語(yǔ)言開(kāi)發(fā)單片機(jī)為啥都是全局變量形式?
【05】分享10個(gè)值得關(guān)注的C語(yǔ)言開(kāi)源項(xiàng)目
class Student():
def __init__(self,name):
self._name = name
self._subject_list = []
student1 = Student('Martin Aaberge')
student2?=?Student('Ninja?Henderson')
student1
和
student2
都是student類的實(shí)例,它們共享同一個(gè)藍(lán)圖,但彼此之間并無(wú)關(guān)系。此時(shí),我們對(duì)學(xué)生們能做的不多,但我們確實(shí)增加了一個(gè)主題列表。要填充此列表,我們需要?jiǎng)?chuàng)建方法,你可以調(diào)用方法來(lái)實(shí)現(xiàn)與該類實(shí)例的交互。
class Student():
def __init__(self,name):
self._name = name
self._subject_list = []
def add_subject(self, subject_name):
self._subject_list.append(subject_name)
def get_student_data(self):
print (f'Student: {self._name} is assigned to:')
for subject in self._subject_list:
print (f'{subject}')
print()
#create students:
student1 = Student('Martin Aaberge')
student2 = Student('Heidi Hummelvold')
#add subjects to student1
student1.add_subject('psychology_101')
student1.add_subject('it_security_101')
#add subject to student2
student2.add_subject('leadership_101')
#print current data on students
student1.get_student_data()
student2.get_student_data()
student
類,并將其導(dǎo)入我們的main.py文件(本案例中,它們都位于同一個(gè)文件夾中)。
from student import Student
student1 = Student('Martin')
student1.add_subject('biomechanics_2020')
student1.get_student_data()
snake_case
,Python是以
snake_case
來(lái)寫(xiě)的,這代表著我們用下劃線來(lái)區(qū)分詞組,即便大學(xué)里也會(huì)犯錯(cuò),因此別難過(guò),只要?jiǎng)e這樣做就行了。這樣寫(xiě)是對(duì)的:?
chocolate_cake?=?'yummy'
chocolateCake?=?'Yummy'
推薦閱讀
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!