python elseif用法_python学习笔记(一)
0、前言
本文是根據廖雪峰python教程學習總結而來。 參考《python學習手冊》,《流暢的python》以及python官方手冊等網絡資料
略過了與C和C++ 語言相同的語法部分
1、轉義方式
python的字符串可以用雙引號和單引號,作用是相同的。轉義的方式和C差不多。不同的是,如果想讓一個字符串里面的字符都不用轉義的話,可以在字符串前面加字母r來聲明。
例如
里面的內容都無需轉義。
或者使用3個引號來把字符串包起來,這樣也不需要轉義了,而且中間還可以換行。
例如
2、字符串的占位符
百分號占位符
和C語言一樣,都是使用百分號占位,但是不同的是,python里面占位符對應的數據也需要百分號來標志,而且占位符對應的數據與字符串之間不需要加逗號。
例如
format格式化占位符
還有一種新的占位符使用{0}占位,有點像C#的格式化字符串操作。 python官方手冊str.format部分
print('{0:,.3f} {1},{name}, {2},'.format(99999.12345, '嘎嘎',[1,2,3,4], name='123'))輸出:
99,999.123 嘎嘎,123, [1, 2, 3, 4],3、布爾值
True False表示真假,布爾運算是and or not,這點與C語言不同
4、if判斷
與C語言不同的是,if和else后面都加冒號,else if變成了elif…
a = 10 b = 20 if a > b :print (a > b) elif a == b:print (a == b) else:print (a < b)5、除法運算
C語言中,兩個整數相除的結果還是整數,而在python中,結果是一個浮點數。
如果想讓兩個整數相除的結果變成整數的話,需要用地板除的方式,雙斜線
例如:
結果是3
6、list
list有點像是C++ 中的vector,可以動態的添加和刪除元素。是一個有序的表。可以對一個list使用len來獲取長度。與C++ 不同,C++ 是強類型的語言,vector中只能包含相同類型的元素,而python的list中可以包含不同類型的對象,還可以包含另一個list。
list使用中括號來表示
例如:
通過索引訪問list時,還可以使用負數,-1就是取最后一個元素
a=['123', '234', '345'] a[-1]輸出345
在后面追加元素,相當于C++ 中vector的push_back,在python中是append
例如
在中間插入元素,相當于C++ 的insert,在python也是insert 例如a.insert(1, '777') 在索引號1的地方插入'777' 在末尾刪除元素,相當于C++ 的pop_back,在python中是pop 例如
a.pop()刪除指定索引的元素,在C++ 中無法通過索引直接刪除vector的元素,需要使用迭代器,在python中也用pop刪除指定位置的元素
例如
刪除索引1的元素
stack
python中沒有單獨的stack對象,可以使用list作為stack然后只使用append和pop方法來模擬入棧出棧
queue
隊列在queue.Queue中
import queue q = queue.Queue() q.put(1) num = q.get() #獲取元素,然后刪除元素 q.empty()7、tuple
tuple類似于C++ 中的tuple,和python的list也很像,只不過tuple一旦創建就不能更改里面的內容了。
tuple可以隱式轉換為單個變量例如:
輸出:
1 2 3也可以使用封包
first, *rest = (1,2,3,4) print(first) print(rest)輸出
1 [2, 3, 4]8、輸入輸出
輸出函數和C語言類似使用
print ("hello world")輸入函數與C和C++ 都比較不同,使用input來獲取輸入的內容 例如
name = input("input your name")9、數字字符串轉換
在C和C++ 中數字轉字符串比較麻煩,一般在C語言中可以使用sprintf。C++ 直接使用to_string。 字符串轉數字的話,C語言可以使用atoi,C++ 可以使用stringstream。 在python中可以直接使用int() float() str()轉換 例如:
a = int('123') b = float('12.3) c = str(123.3)10、循環
python中有兩種循環,一種是for循環一種是while循環。和C、C++ 中的不太一樣。沒有do while循環
for循環:類似于C++中的for (auto i : vec)這種range-based的for循環
while循環:和C、C++中的while循環類似
while x < 10:print(x)x += 1python的循環中同樣可以使用continue和break來終止循環
11、字典dict
字典類似與C++ 中的unordered_map,是一種哈希表的key-value的查找結構。
使用大括號來表示:
判斷一個key在不在字典里面可以使用
"冰封飛飛" in score
返回結果是True或者False
刪除一個元素使用pop方法。score.pop("冰封飛飛")
插入一個元素和C++一樣直接可以score["new"] = 100
查找操作可以使用get操作,因為如果key不存在的時候,直接使用score["nonexist"]會報錯。
get操作還可以指定默認值,如果查找不到key的話,返回默認值
結果:
3遍歷dict:
for (k, v) in score.items():print("%s:%d" % (k, v))12、集合set
集合類似與C++ 中的unordered_ser,是一種哈希表的集合結構。
如果要創建set,需要提供一個list作為輸入集合。
s = set([1, 2, 2, 3]) 初始化時,自動會去重元素。
結果是s = {1, 2, 3}
添加元素使用add方法,刪除元素使用remove方法
集合類似于數學上的集合,有交集和并集的操作,
s1 & s2, s1 | s2
13、函數
函數名是一個指向函數對象的引用,下面可以直接將函數賦值一個別名
a = abs a(-10)而且函數名本身也是一個變量,可以賦值
abs = 10 abs(-10)這樣執行的話,abs(-10)就會報錯了。
python包含了很多內置的函數,可以從python官方手冊查看
函數的定義使用def
空語句可以使用pass,類似于C/C++ 中的分號
可變參數:在參數前面加一個星號,就變成了可變參數,可以傳入任意個數的參數,實際上是自動封裝成了一個tuple。
可變參數
def myFunc(*num):result = 0for i in num:result += ireturn result調用時可以myFunc(1, 2, 3)這樣調用, 也可以傳入一個list或者tuple
param = [1, 2, 3] myFunc(*param)關鍵字參數
def func(a, b, **kw):print(kw)這個函數里面第三個參數是**kw,實際上是一個字典。
調用時可以這樣調用:func(1, 2, name="123", age=18)
參數傳進去時,實際上a = 1, b = 2 kw = {"name":"123", "age":18}
也可以直接傳一個dict作為第三個參數,但是前面需要加兩個星號
關鍵字參數必須跟在位置參數后面。下面的調用方式是不合法的。
def func(a, b=1, c=2):print(a, b, c) func(a=1, 2)命名關鍵字參數:
def func(a, b, *, name, job):print(name)print(job)在上面關鍵字參數,無法控制**kw傳入的key是什么。使用關鍵字參數可以控制可以傳入哪些key。需要使用一個星號作為分隔符。星號后面定義可以傳入的key的名稱。
func(1, 2, name="1", job=2) -> OK func(1, 2, job = 3) -> ERROR這個星號必不可少,如果正好有一個可變參數,那就不需要額外的星號了
def func(a, b, *args, name, job):也是可以的
參數組合
定義函數的時候可以使用多重參數組合,定義的順序是,必選參數,默認參數,可變參數,命名關鍵字參數和關鍵字參數
def f1(a, b = 0, *args, **kw) def f2(a, b = 0, *, d, **kw)對于任意的函數都可以使用一個tuple和一個dict來組織參數調用。類似于func(*args, **kw)
函數注釋/注解
函數注釋是3.X新加入的功能,可以給函數每一個參數添加一個注釋,以及標記返回值的類型。
def func(a:'spam', b:(1,10),c:float=2.5) -> int:return a + b + c注解實際上是把上面添加的內容,寫入到了函數的__annotations__方法中。 可以使用
print(func.__annotations__)打印函數注解,結果如下
{'a': 'spam', 'b': (1, 10), 'c': <class 'float'>, 'return': <class 'int'>}匿名函數lambda
lambda比def功能要小,lambda僅能編寫簡單的函數,連if也不能使用,也不能寫return,返回值就是表達式的結果
f = lambda x, y, z : x + y + z裝飾器
裝飾器是一種委托的調用方式,將被裝飾的函數包裝一層,增加一些定制處理。 裝飾器的用法如下,@log是一個語法糖,相當于test = log(test),將test函數替換為wrapper函數。
@functools.wraps(func)是系統幫忙做的一些處理,可以讓裝飾后的函數和原函數看起來一致。例如:包裝后的函數__name__還是顯示和原函數一致,不會顯示為wrapper函數的__name__
結果:
<trace Fri Oct 5 22:10:38 2018: test((5,))> test func:5偏函數
偏函數類似與C++ 中的bind,可以將函數的某些參數固定下來,生成一個新的函數。
import functools int2 = functools.partial(int, base=2) print(int2('10101'))結果:
2114、切片
通過切片操作可以很方便的將list,tuple,string中一段對象取出來。python沒有提供substr的函數,字符串的取子串的操作都使用切片來進行
L = list(range(10)) print("L = %s " % L) print("L[0:3] = %s " % L[0:3]) print("L[:3]= %s " % L[:3]) print("L[-2:] = %s " % L[-2:]) print("L[-2:-1] = %s " % L[-2:-1]) print("L[:10:2] = %s " % L[:10:2]) print("L[:] = %s " % L[:])結果:
L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] L[0:3] = [0, 1, 2] L[:3]= [0, 1, 2] L[-2:] = [8, 9] L[-2:-1] = [8] L[:10:2] = [0, 2, 4, 6, 8] L[:] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]切片是一個左閉右開的區間,例如L[0:3],獲取[0, 3)區間的元素。
第二個冒號之后的數字是步長,可以相隔步長來取數
只包含一個冒號就是獲取變量本身
15、迭代
python的迭代使用for,10循環中說過一些for的內容。類似于C++ 的for(auto i : vec)這種形式的迭代。不是基于下標迭代。
迭代字典dict
d = {'a' : 1, 'b' : 2} for key in d:print (key) for value in d.values():print (value) for k, v in d.items():print('%s : %d' % (k, v))輸出結果:
a b 1 2 a : 1 b : 2對于字典,for迭代只會迭代key,如果迭代value的話需要使用d.values()作為迭代對象。如果迭代key-value的話,需要使用d.items()作為迭代對象 判斷一個變量是否能迭代,使用下面代碼判斷。
from collections.abc import Iterable d = {'a' : 1, 'b' : 2} print(isinstance(d, Iterable)) print(isinstance(1, Iterable))輸出
True False下標循環
使用enumerate可以將一個可迭代的對象轉換為下標+對象的tuple來迭代
from collections.abc import Iterable d = {'a' : 1, 'b' : 2} for i in enumerate(d.items()):print(i)輸出
(0, ('a', 1)) (1, ('b', 2))這個迭代器我用的是i一個元素,這時候i就變成了一個tuple,如果使用兩個元素的話,會將這個tuple拆分到兩個元素上面去 例如改為:
for i, v in enumerate(d.items()):print('%s : %s' % (i, v))結果就是
0 : ('a', 1) 1 : ('b', 2)應用迭代的函數
sorted
對參數進行排序
L = [3, 2, 4, 1] L = sorted(L) print (L)結果
[1, 2, 3, 4]zip
將參數相同索引的數據組成一個tuple,如果幾個參數的數量不同,按最小的算
L = [1, 2, 3, 4] S = ['a', 'b', 'c', 'd', 'e'] Z = zip(L, S) print (list(Z))結果
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]enumerate
將參數返回一個索引+數據的tuple
S = ['a', 'b', 'c', 'd', 'e'] print (list(enumerate(S)))結果
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e')]filter
將可迭代對象按照參數1,進行過濾。
def isInt(x):if isinstance(x, int):return Trueelse:return False def main(): S = [1, 2, 3.0, 4.1, '5', (6,)]print (list(filter(isInt, S))) if __name__ == "__main__":main()結果
[1, 2]map
類似于C++ 中的使transform,用參數1中的函數,對后面的參數進行迭代運算,如果后面迭代對象數量不一致,按最小的算。
def add(x, y):return x + y def main(): S = [1, 2, 3.0, 4.1]L = [2, 3, 4, 5, 6]print (list(map(add, S, L))) if __name__ == "__main__":main()結果
[3, 5, 7.0, 9.1]reduce
類似于C++ 中的accumulate,使用參數1中的函數,對后面的參數進行累加運算,得到一個結果。
from functools import reduce def main(): d = reduce(lambda x, y : x + y, range(101))print(d) if __name__ == "__main__":main()結果
5050sum
對參數求和
any
對參數全部進行or運算
all
對參數全部進行and運算
max
求參數最大值
min
求參數最小值
歡迎大家關注我們的公眾號,一起學習、探討
總結
以上是生活随笔為你收集整理的python elseif用法_python学习笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python读取mtcars数据集并实现
- 下一篇: mongodb 重启_mongodb历险