Python 學(xué)習(xí)筆記1 - 了解與基礎(chǔ)

  • 終端進(jìn)入 python 交互式環(huán)境
    python
    >>>
    
  • 運(yùn)行 py 文件
    >>> python hello.py
    
  • 加載一個模塊
    import sys
    
    Python會在指定的路徑下搜索對應(yīng)的.py文件,默認(rèn)情況下,Python解釋器會搜索當(dāng)前目錄、所有已安裝的內(nèi)置模塊和第三方模塊,搜索路徑存放在sys模塊的path變量中。如果找不到,就會報(bào)錯。
    import sys
    
    sys.path
    
    添加自己的搜索目錄:
    • 一是直接修改sys.path:sys.path.append('xxx'),這種方法運(yùn)行結(jié)束后失效
    • 設(shè)置環(huán)境變量 PYTHONPATH
  • 注釋 #
  • 使用 4 個空格縮進(jìn)
  • 每一行都是一個語句,當(dāng)語句以冒號 : 結(jié)尾時(shí),縮進(jìn)的語句視為代碼塊
  • py 文件頭通常加上
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    第一行注釋是為了告訴Linux/OS X系統(tǒng),這是一個Python可執(zhí)行程序,Windows系統(tǒng)會忽略這個注釋;
    第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,防止亂碼
  • 輸出
    print('xxx')
    print('a','b','c')
    print(100)
    
  • 輸入
    input()
    a = input()
    a = input('enter something')
    
  • 基本數(shù)據(jù)類型
    • 整數(shù):100 0xff00 int('10')
    • 浮點(diǎn)數(shù):1.23 1.23e9 1.23e-3
    • 字符串
    # 可用 '' 表示
    'abc'
    # 可用 "" 表示
    "def"
    # 字符串包含 ' 可用 "" ,同理 '' 
    "I'm OK"
    # 使用轉(zhuǎn)義字符 \ (% 需用 %% 轉(zhuǎn)義)
    'I\'m OK'
    # \ 還可用作續(xù)行符
    "你\
    好"
    # r''表示''內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義
    r"C:\test"
    # 多行
    '''可
    多
    行'''
    
    • 布爾值:True False
    • 邏輯運(yùn)算符:and( & ) or( | ) not
    • 空值:None
    • NaN
    • 常量:PI
  • 類型判斷函數(shù): isinstance(,) eg:isinstance(123,int)
  • 運(yùn)算符
    • + - * /( 精確除 ) %
    • //( 地板除、取整除 ) **( 乘方 )

字符串和編碼

python 以 unicode 編碼,在內(nèi)存中以 unicode 表示。Unicode編碼通常是2個字節(jié)(ASCII編碼是1個字節(jié))

字母A用ASCII編碼是十進(jìn)制的65,二進(jìn)制的01000001;用Unicode編碼的二進(jìn)制是00000000 01000001(只需要在前面補(bǔ)0)

“可變長編碼” —— UTF-8編碼。UTF-8編碼把一個Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個字節(jié),常用的英文字母被編碼成1個字節(jié),漢字通常是3個字節(jié),只有很生僻的字符才會被編碼成4-6個字節(jié)

ord()函數(shù)獲取字符的整數(shù)表示,chr()函數(shù)把編碼轉(zhuǎn)換為對應(yīng)的字符:

ord('A') ==> 65 
ord('中') ==> 20013
chr(65) ==> A 
chr(20013) ==> 中

以十六進(jìn)制的字符整數(shù)編碼書寫str:

'\u4e2d\u6587' ==> 中文
# 即等價(jià)于
'中文'

用帶b前綴的單引號或雙引號表示一個 bytes 類型:

# x 是 bytes 類型
x = b'ABC'
# y 是 str 類型
y = 'ABC'

str 與 bytes 類型之間的轉(zhuǎn)換:

# str 2 bytes
'ABC'.encode('ascii') ==> b'ABC'
# 在bytes中,無法顯示為ASCII字符的字節(jié),用\x##顯示
'中文'.encode('utf-8') ==> b'\xe4\xb8\xad\xe6\x96\x87'


# bytes 2 str
b'ABC'.decode('ascii') ==> 'ABC'
b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') ==> '中文'

計(jì)算字符串長度:

len('ABC')

計(jì)算字節(jié)數(shù):

len(b'ABC')
len('中文'.encode('utf-8'))

替換生成新的字符串:

a = 'abc' 
# 因?yàn)?str 是不可變對象,所以替換后賦予 b 
b = a.replace('a', 'A') b ==> 'Abc

格式化字符串:

'Hello, %s' % 'world' ==> 'Hello, world'
'Hi, %s, you have $%d.' % ('Michael', 1000000) ==> 'Hi, Michael, you have $1000000.'

% 運(yùn)算符就是用來格式化字符串

常見的占位符有:
%d 整數(shù)
%f 浮點(diǎn)數(shù)
%s 字符串
%x 十六進(jìn)制整數(shù)

# %2d 保留兩位數(shù)字,%02d 保留兩位數(shù)字,不夠補(bǔ) 0
'%2d-%02d' % (3, 1)
# %.2f 小數(shù)點(diǎn)后保留兩位
'%.2f' % 3.1415926

數(shù)據(jù)類型的轉(zhuǎn)換

# str 2 int   
a = int('123')

# int 2 str
b = str(100)

# str 2 float
a = float('123.1')

# float 2 str
b = str(1.23)

# int 2 bool
a = bool(1)

# str 2 bool
b = bool('') ==> False

序列

range(5) 生成一個 0-4 的整數(shù)序列

列表 list

  • str 也可看作是一種 list

定義:

classmates = ['Michael', 'Bob', 'Tracy']
# list里面的元素的數(shù)據(jù)類型可以不同
L = ['Apple', 123, True]

a = list(range(5))

獲取元素個數(shù):

len(classmates)

訪問,通過索引:

classmates[0]
# 注意越界問題
classmates[len(classmates) - 1]
# 可反向訪問,也要注意越界問題
classmates[-1]

添加元素:

# 追加元素到末尾
classmates.append('Adam')
# 添加元素到指定位置
classmates.insert(1, 'Jack')

刪除元素:

# 刪除末尾元素
classmates.pop()
# 刪除指定位置元素
classmates.pop(1)

修改元素:

classmates[1] = 'Sarah'

切片 slice —— 取一個list或tuple的部分元素

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
# 取前3個元素
L[0:3]
# 如果第一個索引是0,還可以省略
L[:3]
# 支持倒數(shù)切片
# 倒數(shù)第一個元素的索引是-1
# 同樣是包左不包右
# 倒數(shù)切片獲取的 list 依然是正序,因?yàn)槟J(rèn)的隔間取數(shù)為 1
L[-2:] ==> ['Bob', 'Jack']
L[-2:-1] ==> ['Bob']

# 獲取反向切片,可以:
L[-1:-6:-1]

可按間隔取數(shù)

L = list(range(100))
# 前10個數(shù),每兩個取一個
L[:10:2]

只寫[:]就可以原樣復(fù)制一個list

L[:]

列表生成式 List Comprehensions —— 用來創(chuàng)建list的生成式

[x * x for x in range(1, 11)] ==> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

for循環(huán)后面還可以加上if判斷

[x * x for x in range(1, 11) if x % 2 == 0] ==> [4, 16, 36, 64, 100]

使用兩層循環(huán),可以生成全排列

[m + n for m in 'ABC' for n in 'XYZ'] ==> ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

使用兩個變量來生成list

d = {'x': 'A', 'y': 'B', 'z': 'C' }
[k + '=' + v for k, v in d.items()] ==> ['y=B', 'x=A', 'z=C']

元組 tuple

tuple 和 list 非常類似,但 tuple 一旦初始化就不能修改

定義:

classmates = ('Michael', 'Bob', 'Tracy')
# 定義一個只有1個元素的tuple
t = (1,)

訪問,通過索引:

classmates[0]

字典 dict

定義:

d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}

訪問:

# 如果沒有對應(yīng)的 key,會報(bào)錯
d['Michael']
# 通過in判斷key是否存在
'Thomas' in d

# 通過 get 方法獲取,沒有返回 None
d.get('Thomas')
# 指定當(dāng)沒有返回的 value
d.get('Thomas', -1)

添加鍵值對:

# d 里沒有 key 為 'Adam' 的鍵值對,如果有,則是修改
d['Adam'] = 67

刪除鍵值對:

d.pop('Bob')

集合 set

定義:

# 提供一個list作為輸入集合,重復(fù)元素自動被過濾
s = set([1, 2, 3])

添加:

s.add(4)

刪除:

s.remove(4)

集合的概念 —— 集合的交集和并集:

s1 & s2

s1 | s2

條件判斷

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

循環(huán)與迭代

for...in循環(huán):

  • for...in循環(huán)的參數(shù)是外部可見的
for i in range(n):
    ...


# list 的遍歷循環(huán)(迭代)
names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)
# 使用Python內(nèi)置的 enumerate 函數(shù)實(shí)現(xiàn)對list實(shí)現(xiàn)類似Java那樣的下標(biāo)循環(huán)
for i, name in enumerate(names):
    print(i, name)
    

# dict 的遍歷循環(huán)(迭代)
d = {'a': 1, 'b': 2, 'c': 3}
# 默認(rèn)情況下,dict迭代的是key
for key in d:
    print(key)
# 迭代 value
for value in d.values():
    print(value)
# 迭代 key-value
for k, v in d.items():
    print(k, " :", v)

while 循環(huán):

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

循環(huán)相關(guān)語句:

  • break 語句
  • continue 語句

可迭代對象 Iterable 與不可迭代對象

  • 只要是可迭代對象,無論有無下標(biāo),都可以迭代
  • 判斷一個對象是不是可迭代對象
    from collections import Iterable
    
    isinstance('abc', Iterable) ==> True
    isinstance([1,2,3], Iterable) ==> True
    isinstance(123, Iterable) ==> False
    
  • 可迭代對象有:list、tuple、dict、set、str、generator(包括生成器和帶yield的generator function)

函數(shù)

高階函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項(xiàng)目接著寫寫一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,792評論 1 118
  • 最近在慕課網(wǎng)學(xué)習(xí)廖雪峰老師的Python進(jìn)階課程,做筆記總結(jié)一下重點(diǎn)。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,932評論 0 5
  • 個人筆記,方便自己查閱使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik閱讀 67,945評論 0 5
  • 一、python 變量和數(shù)據(jù)類型 1.整數(shù) Python可以處理任意大小的整數(shù),當(dāng)然包括負(fù)整數(shù),在Python程序...
    績重KF閱讀 2,008評論 0 1
  • python學(xué)習(xí)筆記 聲明:學(xué)習(xí)筆記主要是根據(jù)廖雪峰官方網(wǎng)站python學(xué)習(xí)學(xué)習(xí)的,另外根據(jù)自己平時(shí)的積累進(jìn)行修正...
    renyangfar閱讀 3,244評論 0 10

友情鏈接更多精彩內(nèi)容