-
如果在一個函數內部調用其自身,這個函數就是遞歸函數。
遞歸函數的優點是定義簡單,邏輯清晰;
理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯不如遞歸清晰。
使用遞歸函數需要注意防止棧溢出。(函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀)
查看全部 -
用 for 循環或者 while 循環時,如果要在循環體內直接退出循環,可以使用 break 語句。
比如在前面的無限循環里面,只要在恰當的時機,我們使用break跳出循環,也可以求出1~100的和。num?=?1 sum?=?0 while?True: ????if?num?>?100: ????????break ????sum?=?sum?+?num ????num?=?num?+?1 print(sum)
同樣的,對于字符串s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',假如希望輸出s的前20個字符,而不是所有字符,我們也可以使用break。
s?=?'ABCDEFGHIJKLMNOPQRSTUVWXYZ' num?=?1 for?ch?in?s: ????if?num?>?20: ????????break ????print(ch)
查看全部 -
s?=?'ABCD' print(s[0]) print(s[1]) print(s[2]) print(s[3])
但是,這是字符串s比較短的情況下可以實現的,當s擁有成千上萬個字符的時候,難道我們要為此書寫上萬行代碼嗎?這個時候for循環就可以派上用場了。
s?=?'ABCD' for?ch?in?s: ????print(ch)?#?注意縮進
在上述代碼中,
ch
是在for循環中定義的,意思是把字符串s
中的每一個元素依次賦值給ch,然后再把ch打印出來,直到打印出字符串s的最后一個字符為止。查看全部 -
當函數沒有返回結果,這個時候從函數獲取到的是一個空值None。
函數可以返回多個值,但多個值之間用逗號隔開且注意順序。
查看全部 -
# 指定順序
template = 'Hello {0}, Hello {1}, Hello {2}, Hello {3}.'
result = template.format('World', 'China', 'Beijing', 'imooc')
print(result) # ==> Hello World, Hello China, Hello Beijing, Hello imooc.
# 調整順序
template = 'Hello {3}, Hello {2}, Hello {1}, Hello {0}.'
result = template.format('World', 'China', 'Beijing', 'imooc')
print(result) # ==> Hello imooc, Hello Beijing, Hello China, Hello World.除了使用順序,還可以指定對應的名字,使得在format過程更加清晰。
# 指定{}的名字w,c,b,i
template = 'Hello {w}, Hello {c}, Hello , Hello {i}.'
world = 'World'
china = 'China'
beijing = 'Beijing'
imooc = 'imooc'
# 指定名字對應的模板數據內容
result = template.format(w = world, c = china, b = beijing, i = imooc)
print(result) # ==> Hello World, Hello China, Hello Beijing, Hello imooc.查看全部 -
定義函數:
使用 def 語句,依次寫出函數名、括號()、括號中的參數和冒號;
在縮進塊中編寫函數體。(函數的返回值用 return 語句返回)
>?return表示返回的意思,函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,并將結果返回。
查看全部 -
把重復的邏輯代碼封裝起來——函數。
函數就是最基本的一種代碼抽象的方式。
https://docs.python.org/3/library/functions.html? ? (python內置的大部分函數)
傳遞的參數數量一定要和函數要求的一致,不然將會引起錯誤。
查看全部 -
?\n
表示換行\t
?表示一個制表符\\
表示?\
?字符本身查看全部 -
a = 'python'
print('hello,', a or 'world')
b = ' '
print('hello,', b or 'world')
('hello,', 'python')
('hello,', 'world')解釋:通過 or 運算,可以把空字符串"變成"默認字符串,而非空字符串保持不變。
查看全部 -
set中的其他方法:
不會報錯的刪除方法discard():
清除所有元素的方法clear():
name_set?=?set(['Jenny',?'Ellena',?'Alice',? ????????????????'Candy',?'David',?'Hally',?'Bob',? ????????????????'Isen',?'Karl']) print(name_set) name_set.clear() print(name_set)
集合的子集和超集(兩個集合間的關系):
s1?=?set([1,?2,?3,?4,?]) s2?=?set([1,?2,?3,?4,?5,?]) #?判斷s1是否為s2的子集 s1.issubset(s2)?#?==>?True #?判斷s2是否為s1的超集 s2.issuperset(s1)?#?==>?True
判斷集合是否重合:
isdisjoint()方法:如果有重合,返回False,否則返回True。
s1?=?set([1,?2,?3,?4,?5]) s2?=?set([1,?2,?3,?4,?5,?6,?7,?8,?9]) s1.isdisjoint(s2)?#?False
查看全部 -
刪除set中的元素
remove()方法
name_set?=?set(['Jenny',?'Ellena',?'Alice',?'Candy',?'David',?'Hally',?'Bob',?'Isen',?'Karl']) name_set.remove('Jenny') print(name_set)
>?如果remove的元素不在set里面的話,那么將會引發錯誤。
查看全部 -
往set中添加元素
方法add():一個一個添加
names?=?['Alice',?'Bob',?'Candy',?'David',?'Ellena'] name_set?=?set(names) name_set.add('Gina')
? ? 2.update()方法:可以一次性給set添加多個元素。
names?=?['Alice',?'Bob',?'Candy',?'David',?'Ellena'] new_names?=?['Hally',?'Isen',?'Jenny',?'Karl'] name_set?=?set(names) name_set.update(new_names)?? print(name_set)
查看全部 -
訪問set中的某個元素實際上就是判斷一個元素是否在set中,這時可以用in來判斷某個元素是否在set中。
>?set元素是區分大小寫的,必須大小寫完全匹配,才能判斷該元素在set里面。
查看全部 -
set內也擁有一系列元素,且set里面的元素是不允許重復的,set里面的元素是沒有順序的。
創建set的方式是使用set(),并傳入一個list,list的元素將會被轉換成set的元素。
s?=?set([1,?4,?3,?2,?5]) print(s)?#??set([1,?2,?3,?4,?5])
在向set傳入包含相同元素的list時,相同元素只會保留一個。
查看全部 -
dict中的其他方法:
獲取所有的key:
使用keys()函數
d?=?{ ?????'Alice':?[50,?61,?66],? ??????'Bob':?[80,?61,?66],? ??????'Candy':?[88,?75,?90] ??????} for?key?in?d.keys(): ????print(key)
獲取所有的value:
使用values()函數
d?=?{ ?????'Alice':?[50,?61,?66],? ??????'Bob':?[80,?61,?66],? ??????'Candy':?[88,?75,?90] ??????} for?value?in?d.values(): ????print(value)
清除所有元素:
使用clear()函數
d?=?{ ?????'Alice':?[50,?61,?66],? ??????'Bob':?[80,?61,?66],? ??????'Candy':?[88,?75,?90] ??????} d.clear() print(d)
查看全部
舉報