學(xué)而時(shí)習(xí)之---Python基礎(chǔ)

1.數(shù)據(jù)類型和變量

# coding=utf-8

"""
數(shù)據(jù)類型:整數(shù)睁本、浮點(diǎn)數(shù)踩蔚、字符串、布爾值(True,False)右钾、空值
變量(大小寫英文、數(shù)字和_的組合科吭,且不能用數(shù)字開頭)
常量(不能變d變量奖慌,字母全部大寫)
"""
a = 10  # a是整數(shù)
b = 1.11  # b是浮點(diǎn)數(shù)
c = "I\'m \"OK\"!\n"  # c和d是字符串
d = 'I\'m learning\tPython.\n'
e = True  # e為布爾型
f = None  # f為空值
print(a, b, c, d, e, f)

s = a
a = 11
print(a, s)

PI = 301415926
# 精確除
print(10 / 3)
# 取整
print(10 // 3)
# 取余
print(10 % 3)
Snip20170913_2.png

2.字符串和編碼

"""
字符編碼:ASCII編碼驮俗、Unicode、UTF-8
    ASCII編碼:占用一個(gè)字節(jié)侣集,表示大小寫英文字母键俱、數(shù)字和一些符號(hào)
    Unicode編碼:通常占用兩個(gè)字節(jié),把所有語言都統(tǒng)一到一套編碼里
    UTF-8:可變長編碼世分,節(jié)省空間编振,常用的英文字母被編碼成1個(gè)字節(jié),漢字通常是3個(gè)字節(jié)
格式化字符串:%d(整數(shù))臭埋、%f(浮點(diǎn)數(shù))踪央、%s(字符串)、%x(十六進(jìn)制整數(shù))
"""
# 獲取字符的整數(shù)表示:
print(ord('A'))
print(ord('中'))

# 把編碼轉(zhuǎn)換為對(duì)應(yīng)的字符:
print(chr(65))
print(chr(25444))

# str變?yōu)閎ytes 用encode()方法
print('中文'.encode('utf-8'))
print('abc'.encode('ascii'))

# bytes變?yōu)閟tr 用decode()方法
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))
print(b'abc'.decode('ascii'))

# 計(jì)算str有幾個(gè)字符 用len()
print(len('acvv'))
print(len('哈哈好啊好啊'))

# 格式化字符串
print('%d-%.2f' % (4, 44.321))
print('age: %d. gender: %s' % (11, "hh"))
Snip20170913_3.png

3.list和tuple

"""
list和tuple
    共同點(diǎn):有序集合斋泄,元素的數(shù)據(jù)類型可以不同
    不同點(diǎn):
        list:可隨時(shí)添加和刪除其中的元素
        tuple:一旦初始化就不能修改
"""

# list
classmates = ['michael', 'bob', 'tracy']
# 獲取list元素個(gè)數(shù)
print(len(classmates))
# 用索引來訪問list元素
print(classmates[0])
print(classmates[2])
print(classmates[-1])  # 倒數(shù)第一個(gè)
print(classmates[-2])  # 倒數(shù)第二個(gè)
# 追加元素到末尾
classmates.append('adam')
print(classmates)
# 插入到指定位置
classmates.insert(2, 'jack')
print(classmates)
# 刪除list末尾的元素
classmates.pop()
print(classmates)
# 刪除指定位置元素
classmates.pop(1)
print(classmates)
# 根據(jù)索引修改元素
classmates[1] = 'sarah'
print(classmates)

# tuple
cla = ('mm', 'ss', 'cc')
print(cla[2])
Snip20170913_4.png

4.條件判斷

"""
條件判斷
    if <條件判斷1>:
    <執(zhí)行1>
    elif <條件判斷2>:
        <執(zhí)行2>
    elif <條件判斷3>:
        <執(zhí)行3>
    else:
        <執(zhí)行4>
"""
age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

5.循環(huán)

"""
循環(huán)
    1.for...in
    2.while

break和continue
"""
names = ['mm', 'ss', 'cc']
for name in names:
    print(name)

s = 0
for x in range(10):
    s = s + x
print(s)


sm = 0
n = 10
while n > 0:
    sm = sm + n
    n = n - 1
print(sm)

# break:退出當(dāng)前循環(huán)
n = 1
while n <= 20:
    if n > 5:
        break
    print(n)
    n = n + 1
print('END')

# continue:跳出當(dāng)前的這一次循環(huán)杯瞻,繼續(xù)開始下一次循環(huán)
n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0:
        continue
    print(n)
Snip20170913_5.png

6.dict和set

"""
dict:使用key-value存儲(chǔ)
set:一組key的集合,無重復(fù)元素
"""

# dict
d = {'mm': 55, 'ss': 44, 'll': 33}
print(d)
# 取出某個(gè)key對(duì)應(yīng)的value
print(d['mm'])
print(d.get('mm'))

# 添加
d['aa'] = 99
print(d)

# 修改某個(gè)key對(duì)應(yīng)的value
d['aa'] = 88
print(d)

# 刪除一個(gè)key
d.pop('aa')
print(d)

# set
s = set([1, 2, 3])
print(s)

s = set([1, 2, 2, 4, 4])
print(s)
# 添加
s.add(3)
print(s)
s.add(4)
print(s)
# 刪除
s.remove(4)
print(s)

s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
print(s1 & s2)  # 交集
print(s1 | s2)  # 并集
Snip20170913_6.png

7.函數(shù)

"""
函數(shù)
    定義函數(shù):def 函數(shù)名(參數(shù)): return語句
    函數(shù)的參數(shù):
        1.位置參數(shù)
        2.默認(rèn)參數(shù)
        3.可變參數(shù):允許你傳入0個(gè)或任意個(gè)參數(shù)炫掐,這些可變參數(shù)在函數(shù)調(diào)用時(shí)自動(dòng)組裝為一個(gè)tuple
        4.關(guān)鍵字參數(shù):關(guān)鍵字參數(shù)允許你傳入0個(gè)或任意個(gè)含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè)dict
        5.命名關(guān)鍵字參數(shù):要限制關(guān)鍵字參數(shù)的名字,命名關(guān)鍵字參數(shù)需要一個(gè)特殊分隔符*睬涧,*后面的參數(shù)被視為命名關(guān)鍵字參數(shù)
        在Python中定義函數(shù)募胃,可以用必選參數(shù)、默認(rèn)參數(shù)畦浓、可變參數(shù)痹束、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù),這5種參數(shù)都可以組合使用讶请。
        但是請(qǐng)注意祷嘶,參數(shù)定義的順序必須是:必選參數(shù)、默認(rèn)參數(shù)夺溢、可變參數(shù)论巍、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)。
"""
import math


def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x
print('--------------------')
print(my_abs(-4))


def move(x, y, step, angle=0):  # angle是默認(rèn)參數(shù)
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny  # 返回多個(gè)值
print('--------------------')
print(move(1, 2, 2))
print('--------------------')
print(move(1, 2, 2, 1))  # 默認(rèn)參數(shù)此時(shí)的值為1


# 可變參數(shù)
def calc(*numbers):
    sm = 0
    for n in numbers:
        sm = sm + n * n
    return sm

print('--------------------')
print(calc(1, 2, 3,))

nums = [1, 2, 3]
print('--------------------')
print(calc(*nums))  # *nums把nums這個(gè)list的所有元素作為可變參數(shù)傳進(jìn)去


# 關(guān)鍵字參數(shù)
def person(name, age, **kw):
    print("name:", name, "age:", age)
    for k in kw:
        print(k, kw[k])

print('--------------------')
person('Adam', 45, gender='M', job='Engineer')

extra = {'city': 'Beijing', 'job': 'Engineer'}
print('--------------------')
person('Jack', 24, **extra)  # **extra表示把extra這個(gè)dict的所有key-value用關(guān)鍵字參數(shù)傳入到函數(shù)的**kw參數(shù)


# 命名關(guān)鍵字參數(shù)
def person(name, age, *, city, job):
    print(name, age, city, job)
print('--------------------')
person('Jack', 24, city='Beijing', job='Engineer')


# 組合參數(shù)
def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
print('--------------------')
f1(1, 2, 3, 'a', 'b', x=99)
"""
*args是可變參數(shù)风响,args接收的是一個(gè)tuple嘉汰;

**kw是關(guān)鍵字參數(shù),kw接收的是一個(gè)dict
"""
Snip20170914_7.png

8.切片

"""
切片
"""

L = list(range(100))  # 創(chuàng)建一個(gè)0-99的數(shù)列
print(L[:10])  # 取前10個(gè)
print(L[-10:])  # 取后10個(gè)
print(L[10:20])  # 取前11-20個(gè)數(shù)
print(L[:10:2])  # 取前10個(gè),每兩個(gè)取一個(gè)
print(L[::5])  # 所有數(shù)状勤,每5個(gè)取一個(gè)
Snip20170914_8.png

9.迭代

"""
迭代:for...in 遍歷list或tuple或dict
"""

d = {'a': 1, 'b': 2, 'c': 3}

# 迭代key
for key in d:
    print(key)
print('-----------------')
# 迭代value
for value in d.values():
    print(value)
print('-----------------')
# 同時(shí)迭代key和value
for k, v in d.items():
    print(k, v)
print('-----------------')

# 如何判斷一個(gè)對(duì)象是可迭代對(duì)象呢鞋怀?
from collections import Iterable
print(isinstance('abc', Iterable))  # str是否可迭代
print(isinstance([1, 2, 3], Iterable))  # list是否可迭代
print(isinstance(123, Iterable))  # 整數(shù)是否可迭代

print('-----------------')
# enumerate函數(shù)可以把一個(gè)list變成索引-元素對(duì)
for i, value in enumerate(['A', 'B', 'C']):
    print(i, value)

print('-----------------')
# 同時(shí)引用兩個(gè)變量
for x, y in [(1, 1), (2, 4), (3, 9)]:
    print(x, y)
Snip20170914_9.png

10.列表生成式

"""
列表生成式(List Comprehensions)
"""

print(list(range(1, 11)))
print([x * x for x in range(1, 11)])
print([x * x for x in range(1, 11) if x % 2 == 0])
print([m + n for m in 'ABC' for n in 'XYZ'])

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

L = ['Hello', 'World', 'IBM', 'Apple']
print([s.lower() for s in L])
Snip20170914_10.png

11.生成器

"""
生成器(generator)
"""
g = (x * x for x in range(10))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))

print('----------')
l = (x * x for x in range(10))
for n in l:
    print(n)

print('----------')


def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1
    return 'done'
print(fib(6))

print('----------')
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'
b = fib(6)
print(b)  # b是一個(gè)generator

print('----------')
for n in fib(6):
    print(n)
Snip20170914_12.png

12.迭代器

"""
迭代器(Iterator):可以被next()函數(shù)調(diào)用并不斷返回下一個(gè)值的對(duì)象。它們表示一個(gè)惰性計(jì)算的序列
可以直接作用于for循環(huán)的對(duì)象統(tǒng)稱為可迭代對(duì)象:Iterable.包括:list持搜、tuple密似、dict、set葫盼、str残腌、generator
集合數(shù)據(jù)類型如list、dict、str等是Iterable但不是Iterator废累,不過可以通過iter()函數(shù)獲得一個(gè)Iterator對(duì)象
Python的for循環(huán)本質(zhì)上就是通過不斷調(diào)用next()函數(shù)實(shí)現(xiàn)的
"""
from collections import Iterable
from collections import Iterator

print(isinstance([], Iterable))
print(isinstance([], Iterator))
print('-------------')
print(isinstance({}, Iterable))
print(isinstance({}, Iterator))
print('-------------')
print(isinstance((x for x in range(10)), Iterable))
print(isinstance((x for x in range(10)), Iterator))  # 生成器都是Iterator對(duì)象
print('-------------')
# 把list邓梅、dict、str等Iterable變成Iterator可以使用iter()函數(shù):
print(isinstance(iter([]), Iterable))
print(isinstance(iter([]), Iterator))
Snip20170914_11.png

13.高階函數(shù)

from functools import reduce

"""
高階函數(shù)
map():map()函數(shù)接收兩個(gè)參數(shù)邑滨,一個(gè)是函數(shù)日缨,一個(gè)是Iterable,map將傳入的函數(shù)依次作用到序列的每個(gè)元素掖看,并把結(jié)果作為新的Iterator返回.
reduce():reduce把一個(gè)函數(shù)作用在一個(gè)序列上匣距,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做計(jì)算
filter():用于過濾序列,把傳入的函數(shù)依次作用于每個(gè)元素哎壳,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素毅待。
sorted():排序,可以接收一個(gè)key函數(shù)來實(shí)現(xiàn)自定義的排序
"""


# map()
def f(x):
    return x * x

r = map(f, [1, 2, 3, 4, 5, 6])
print(list(r))  # 結(jié)果r是一個(gè)Iterator归榕,Iterator是惰性序列尸红,因此通過list()函數(shù)讓它把整個(gè)序列都計(jì)算出來并返回一個(gè)list。

# 把list所有數(shù)字轉(zhuǎn)為字符串
print(list(map(str, [1, 2, 3, 4, 5, 6])))


# reduce()
def add(x, y):
    return x + y
print(reduce(add, [1, 2, 3, 4, 5]))


def fn(x, y):
    return x * 10 + y
print(reduce(fn, [1, 3, 5, 7, 9]))


# map()和redce()組合使用
def char2num(s):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
print(reduce(lambda x, y: x * 10 + y, map(char2num, '13579')))
print('----------------')


# filter()返回的是一個(gè)Iterator刹泄,也就是一個(gè)惰性序列,用list()函數(shù)獲得所有結(jié)果并返回list


# 刪掉空字符串
def not_empty(s):
    return s and s.strip()
print(list(filter(not_empty, ['A', '', 'B', None, 'C', '  '])))

# sorted()
print('----------------')
print(sorted([36, 5, -12, 9, -21]))
print(sorted([36, 5, -12, 9, -21], key=abs))  # 按絕對(duì)值大小排序
print(sorted(['bob', 'about', 'Zoo', 'Credit']))
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower))  # 按小寫排序
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True))  # 反向排序
Snip20170915_13.png

14.返回函數(shù)和匿名函數(shù)

"""
返回函數(shù)
匿名函數(shù):關(guān)鍵字lambda表示匿名函數(shù)外里,冒號(hào)前面的x表示函數(shù)參數(shù)。匿名函數(shù)只能有一個(gè)表達(dá)式特石,不用寫return盅蝗,返回值就是該表達(dá)式的結(jié)果。
"""


# 返回函數(shù)
def lazy_sum(*args):
    def sm():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sm

f = lazy_sum(1, 3, 5, 7, 9)
print(f())  # 調(diào)用函數(shù)f


# 匿名函數(shù)
ax = lambda x: x * x
print(ax(5))


def build(x, y):
    return lambda: x * x + y * y  # 把匿名函數(shù)作為返回值返回
print(build(2, 3)())
Snip20170915_14.png

15.裝飾器

"""
裝飾器:在代碼運(yùn)行期間動(dòng)態(tài)增加功能姆蘸,decorator就是一個(gè)返回函數(shù)的高階函數(shù)墩莫,
"""


def log(func):
    def wrapper(*args, **kw):
        print('call %s()' % func.__name__)
        return func(*args, **kw)
    return wrapper


@log
def now():
    print('2017-07-07')

now()
Snip20170915_16.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逞敷,隨后出現(xiàn)的幾起案子狂秦,更是在濱河造成了極大的恐慌,老刑警劉巖兰粉,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件故痊,死亡現(xiàn)場離奇詭異,居然都是意外死亡玖姑,警方通過查閱死者的電腦和手機(jī)愕秫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來焰络,“玉大人戴甩,你說我怎么就攤上這事∩帘耍” “怎么了甜孤?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵协饲,是天一觀的道長。 經(jīng)常有香客問我缴川,道長茉稠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任把夸,我火速辦了婚禮而线,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恋日。我一直安慰自己膀篮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布岂膳。 她就那樣靜靜地躺著誓竿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谈截。 梳的紋絲不亂的頭發(fā)上筷屡,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音簸喂,去河邊找鬼速蕊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛娘赴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跟啤,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼诽表,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了隅肥?” 一聲冷哼從身側(cè)響起竿奏,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腥放,沒想到半個(gè)月后泛啸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秃症,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年候址,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片种柑。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岗仑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出聚请,到底是詐尸還是另有隱情荠雕,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站炸卑,受9級(jí)特大地震影響既鞠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盖文,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一嘱蛋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧椅寺,春花似錦浑槽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荆萤,卻和暖如春镊靴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背链韭。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工偏竟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敞峭。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓踊谋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旋讹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子殖蚕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一、python 變量和數(shù)據(jù)類型 1.整數(shù) Python可以處理任意大小的整數(shù)沉迹,當(dāng)然包括負(fù)整數(shù)睦疫,在Python程序...
    績重KF閱讀 1,707評(píng)論 0 1
  • python學(xué)習(xí)筆記 聲明:學(xué)習(xí)筆記主要是根據(jù)廖雪峰官方網(wǎng)站python學(xué)習(xí)學(xué)習(xí)的,另外根據(jù)自己平時(shí)的積累進(jìn)行修正...
    renyangfar閱讀 3,048評(píng)論 0 10
  • 最近在慕課網(wǎng)學(xué)習(xí)廖雪峰老師的Python進(jìn)階課程鞭呕,做筆記總結(jié)一下重點(diǎn)蛤育。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,692評(píng)論 0 5
  • 記憶的往昔 將我深鎖于你 ——久久的夢境 在我心頭蕩漾的河水 你那不經(jīng)意的艷影 投入我軟軟的柔波 月光朦朧的輝耀 ...
    吾夢雨和姜德佳閱讀 286評(píng)論 2 10
  • 我想給你買一條繩子
    烤魚咯閱讀 204評(píng)論 2 0