name = input('please enter your name:')
print('hello,', name)
print('please input:')
a = int(input())
if a > 0:
print(a)
else:
print(-a)
print("I'm OK")
print("I\'m OK")
print('\\\n\\')
print('\\\t\\')
print(r'\\\t\\')
print('''line1
line2
line3''')
#輸出結(jié)果為:
I'm OK
I'm OK
\
\
\ \
\\\t\\
line1
line2
line3
轉(zhuǎn)義字符 \ 可以轉(zhuǎn)義很多字符柳畔,比如 \n 表示換行确沸, \t 表示制表符拉盾,字符 \本身也要轉(zhuǎn)義,所以 \ 表示的字符就是
用 r'' 表示 '' 內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義
當(dāng)表示多行內(nèi)容的時(shí)候用三個(gè)單引號(hào)
變量本身不固定的語(yǔ)言稱之為動(dòng)態(tài)語(yǔ)言屎暇,也就是說(shuō)變量可以重復(fù)賦值。而與之對(duì)應(yīng)的就是靜態(tài)語(yǔ)言驻粟,靜態(tài)語(yǔ)言在定義變量的時(shí)候必須指定變量類型根悼,如果賦值的時(shí)候類型不匹配就會(huì)報(bào)錯(cuò)。與靜態(tài)語(yǔ)言相比蜀撑,動(dòng)態(tài)語(yǔ)言更靈活酷麦。
print(ord('A'))
print(ord('a'))
print(ord('中'))
print(chr(66))
print(chr(25991))
65
97
20013
B
文
print(len('ABC'))
print(len('中文'))
print(len(b'ABC'))
print(len(b'\xe4\xb8\xad\xe6\x96\x87'))
print(len('中文'.encode('utf-8')))
3
2
3
6
6
len() 函數(shù)計(jì)算的是 str 的字符數(shù)态罪,如果換成 bytes , len() 函數(shù)就計(jì)算字節(jié)數(shù)陡叠。
1 個(gè)中文字符經(jīng)過(guò) UTF-8 編碼后通常會(huì)占用 3 個(gè)字節(jié),而 1 個(gè)英文字符只占用 1 個(gè)字節(jié)岛心。
# -*- coding: utf-8 -*-
該注釋是為了告訴 Python 解釋器旦袋,按照 UTF-8 編碼讀取源代碼,否則幸冻,在源代碼中寫的中文輸出可能會(huì)有亂碼。
print('Hello,%s' % 'world')
print('%2d-%02d' % (3, 1))
print('%.2f' % 3.1415926)
print('Age: %s. Gender: %s' % (25, True))
print('growth rate: %d %%' % 7)
Hello,world
3-01
3.14
Age: 25. Gender: True
growth rate: 7 %
如果不太確定應(yīng)該用什么劫哼, %s 永遠(yuǎn)起作用,它會(huì)把任何數(shù)據(jù)類型轉(zhuǎn)換為字符串。
classmates = ['Michael', 'Bob', 'Tracy']
print(len(classmates))
print(classmates[0])
print(classmates[1])
print(classmates[2])
print(classmates[-1])
classmates.append('Adam')
print(classmates)
classmates.insert(1, 'Jack')
print(classmates)
print(classmates.pop())
print(classmates)
print(classmates.pop(1))
print(classmates)
classmates[1] = 'Sarah'
print(classmates)
3
Michael
Bob
Tracy
Tracy
['Michael', 'Bob', 'Tracy', 'Adam']
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
Adam
['Michael', 'Jack', 'Bob', 'Tracy']
Jack
['Michael', 'Bob', 'Tracy']
['Michael', 'Sarah', 'Tracy']
tuple 和 list 非常類似套才,但是 tuple 一旦初始化就不能修改炭懊。
不可變的 tuple 有什么意義谐鼎?因?yàn)?tuple 不可變星持,所以代碼更安全。如果可能,能用 tuple 代替 list 就盡量用 tuple猛们。
只有 1 個(gè)元素的 tuple 定義時(shí)必須加一個(gè)逗號(hào) , ,來(lái)消除歧義羽戒。這是因?yàn)槔ㄌ?hào) () 既可以表示 tuple枣接,又可以表示數(shù)學(xué)公式中的小括號(hào),這就產(chǎn)生了歧義缺谴,因此但惶,Python 規(guī)定,這種情況下湿蛔,按小括號(hào)進(jìn)行計(jì)算膀曾。
雖然元組的內(nèi)容不可變,但是當(dāng)元組中包含列表的時(shí)候列表的內(nèi)容是可變的煌集,要?jiǎng)?chuàng)建一個(gè)內(nèi)容也不變的 tuple 怎么做妓肢?那就必須保證 tuple 的每一個(gè)元素本身也不能變。
dict&set&不可變對(duì)象
相對(duì)于list,dict的查找方式類似于字典的索引查找苫纤,所以較快碉钠。
將數(shù)據(jù)放入dict時(shí),除了初始化指定的方法外卷拘,還可以通過(guò)key放喊废,后放的會(huì)把前面的沖掉。如果查找的時(shí)候key不存在栗弟,dict就會(huì)報(bào)錯(cuò)污筷。
要?jiǎng)h除一個(gè)一個(gè)key,使用pop乍赫,對(duì)應(yīng)的value也會(huì)被刪除瓣蛀。
set 和 dict 類似,也是一組 key 的集合雷厂,但不存儲(chǔ) value惋增。 由于 key 不能重復(fù),所以改鲫,在 set 中诈皿,沒(méi)有重復(fù)的 key。
set 是有序的像棘,重復(fù)元素在 set 中自動(dòng)被過(guò)濾稽亏。通過(guò) add(key) 方法可以添加元素到 set 中,可以重復(fù)添加缕题,但不會(huì)有效果截歉。通過(guò) remove(key) 方法可以刪除元素。set 可以看成數(shù)學(xué)意義上的無(wú)序和無(wú)重復(fù)元素的集合避除,因此怎披,兩個(gè) set 可以做數(shù)學(xué)意義上的交集胸嘁、并集等操作。
位置參數(shù)
def power(x, n):
s = 1;
while n > 0:
n = n - 1
s = s * x
return s
print(power(5, 2))
print(power(5, 3))
25
125
power(x,n)函數(shù)有兩個(gè)參數(shù)x和n凉逛,這兩個(gè)參數(shù)都是位置參數(shù)性宏,調(diào)用函數(shù)的時(shí)候,傳入的兩個(gè)值依次按照位置順序賦給參數(shù)x和n状飞。
默認(rèn)參數(shù)
def power(x, n=2):
s = 1;
while n > 0:
n = n - 1
s = s * x
return s
print(power(5))
25
這里將第二個(gè)參數(shù)n的默認(rèn)值設(shè)定為2毫胜,調(diào)用power(5)的時(shí)候相當(dāng)于調(diào)用了power(5,2),但是當(dāng)n不為2的時(shí)候就必須明確地傳入n诬辈,比如power(5,3)酵使。據(jù)此,設(shè)置默認(rèn)參數(shù)可以簡(jiǎn)化函數(shù)地調(diào)用焙糟,但是有幾點(diǎn)需要注意:一是必選參數(shù)在前口渔,默認(rèn)參數(shù)在后,否則python的編譯器會(huì)報(bào)錯(cuò)穿撮。 二是當(dāng)函數(shù)有多個(gè)參數(shù)的時(shí)候缺脉,把變化大的參數(shù)放在前面,變化小的參數(shù)放在后面而且可以當(dāng)作默認(rèn)參數(shù)悦穿,這樣就能最大限度地降低調(diào)用函數(shù)的難度攻礼。
默認(rèn)參數(shù)中的坑
可變參數(shù)
可變參數(shù)顧名思義就是傳入的參數(shù)個(gè)數(shù)是可變的,是任意的栗柒。
第一想法是將輸入的參數(shù)組合成一個(gè)list或者tuple礁扮,如下:
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n*n
return sum
print(calc([1, 2, 3]))
print(calc((1, 2, 3)))
14
14
下面利用可變參數(shù)的方式可以簡(jiǎn)化上述方式:
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n*n
return sum
print(calc(1, 2, 3))
print(calc(1, 2, 3))
運(yùn)行結(jié)果是和上面一樣的。
當(dāng)已經(jīng)有一個(gè)list或者tuple時(shí)瞬沦,調(diào)用一個(gè)可變參數(shù)可以采用以下兩種方式太伊,其中第一種較為繁瑣,而第二種是python允許在list或tuple前面加一個(gè)*號(hào)逛钻,把list或者tuple的元素變成可變參數(shù)傳進(jìn)去倦畅。
nums = [1, 2, 3]
print(calc(nums[0], nums[1], nums[2]))
print(calc(*nums))
運(yùn)行結(jié)果仍然和上面的一致。
關(guān)鍵字參數(shù)
可變參數(shù)允許你傳入 0 個(gè)或任意個(gè)參數(shù)绣的,這些可變參數(shù)在函數(shù)調(diào)用時(shí)自動(dòng)組裝為一個(gè) tuple。而關(guān)鍵字參數(shù)允許你傳入 0 個(gè)或任意個(gè)含參數(shù)名的參數(shù)欲账,這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè) dict 屡江。
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
print(person('Michael', 30))
print(person('Bob', 35, city='Beijing'))
print(person('Adam', 45, gender='M', job='Engineer'))
name: Michael age: 30 other: {}
0
name: Bob age: 35 other: {'city': 'Beijing'}
0
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
0
關(guān)鍵字參數(shù)有什么用?它可以擴(kuò)展函數(shù)的功能赛不。比如惩嘉,在 person 函數(shù)里,我們保證能接收到 name 和 age 這兩個(gè)參數(shù)踢故,但是文黎,如果調(diào)用者愿意提供更多的參數(shù)惹苗,我們也能收到。試想你正在做一個(gè)用戶注冊(cè)的功能耸峭,除了用戶名和年齡是必填項(xiàng)外桩蓉,其他都是可選項(xiàng),利用關(guān)鍵字參數(shù)來(lái)定義這個(gè)函數(shù)就能滿足注冊(cè)的需求劳闹。
同時(shí)院究,和可變參數(shù)類似,也可以先組裝出一個(gè)dict本涕,然后把該dict轉(zhuǎn)換為關(guān)鍵字參數(shù)傳進(jìn)去业汰,方法也有兩種,其中第一種較為繁瑣菩颖,第二種更加簡(jiǎn)潔:
extra = {'city': 'Beijing', 'job': 'Engineer'}
print(person('Jack', 24, city=extra['city'], job=extra['job']))
print(person('Jack', 24, **extra))
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
None
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
None
**extra 表示把 extra 這個(gè) dict 的所有 key-value 用關(guān)鍵字參數(shù)傳入到函數(shù)的 kw 參數(shù)样漆, kw 將獲得一個(gè) dict,注意 kw 獲得的 dict 是 extra 的一份拷貝晦闰,對(duì) kw 的改動(dòng)不會(huì)影響到函數(shù)外的 extra放祟。