程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python自學過程知識點總結

編輯:Python

Python入門

  • 學習目標
  • 安裝Python
  • Python基礎
    • 輸入輸出
    • 數據類型
    • 方法、占位符
    • 列表
      • List
      • tuple
    • 條件判斷
    • 循環
      • for...in循環
      • while循環
      • break打斷循環
      • continue跳過循環
    • dict和set
      • dict
      • set
    • 函數
    • 參數
      • 位置參數
      • 默認參數
      • 可變參數
      • 關鍵字參數
      • 命名關鍵字參數
    • 遞歸函數
      • 遞歸
      • 尾遞歸
  • 高級特性
    • 切片
    • 迭代Iteration
    • 列表生成式
    • 生成器generator
    • 函數式編程
      • 函數
        • map
        • reduce
        • sorted()
      • 返回函數
      • lambda匿名函數
      • 裝飾器
  • 爬取豆瓣網栗子

學習目標

首先,為什麼要學python呢?

  1. 不想當全棧的程序員不是cool girl,java、C比較難,畢業半年還給老師了,基礎python比較簡單(沒有說python簡單的意思!!高級python以後再說);
  2. 裝x;
  3. 方便生活,因為python確實很好用。

有目標才有動力!

目標:學會基礎python,學會爬蟲,可以在百度上爬下來一篇小說或詩詞。

安裝Python

Python下載
cmd執行python查看是否安裝成功,出現版本號則安裝成功。

Python基礎

跟著廖雪峰老師的教程過了一遍,Python教程 by 廖雪峰。
VSCode創建 0322.py文件。
cmd中執行。找到0322.py的目錄,python 0322.py執行代碼。

輸入輸出

# 輸出
print("hello python")
# 輸入
name = input("please enter your name:")
print("name:", name)

數據類型

整數、浮點數、字符串、布爾值(TrueFalse)、空值(None)、變量(變量名必須是大小寫英文、數字和_的組合,且不能用數字開頭)、常量(在Python中,通常用全部大寫的變量名表示常量)

# r''表示轉義字符不轉義
print(r"///demo")
# '''...'''表示多行內容
print('''lizi 是 小可愛''')
# 布爾值判斷
print(5 > 3)
# 除法
print("/", 10/3)
# 地板除,取整
print("//", 10//3)
# 取余
print("%", 10%3)

方法、占位符

print("abcde的長度", len('abcde'))
# abcde的長度 5
print("hello, %s" %"world")
# hello, world
占位符替換內容%d整數%f浮點數%s字符串%x十六進制整數
print('%.2f%%' % 24.2455)
# 24.25%

列表

List

內置數據類型
元素類型可以不同,也可以嵌套,如:["apple", "orange", "sweets", 2, [True, "22"]]

food = ["apple", "orange", "sweets"]
print("list的長度", len(food))
# list的長度 3
print("list第一個、第二個、倒數第一個元素", food[0], food[1], food[-1])
# list第一個、第二個、倒數第一個元素 apple orange sweets
# 末尾插入元素 append()
food.append("banana")
print(food)
# ['apple', 'orange', 'sweets', 'banana']
# 指定位置插入元素 insert()
food.insert(2, "bread")
print(food)
# ['apple', 'orange', 'bread', 'sweets', 'banana']
# 刪除末尾元素 pop()
print(food.pop())
print(food)
# banana
# ['apple', 'orange', 'bread', 'sweets']
# 刪除指定位置元素 pop(i)
print(food.pop(1))
print(food)
# orange
# ['apple', 'bread', 'sweets']
# 元素替換
food[0] = "peach"
print(food)
# ['peach', 'bread', 'sweets']

tuple

tuple無append()insert()pop()等方法,一經定義後不能改變。
只有一個元素時,省略小括號,非tuple類型。可以加個逗號,代表tuple類型。

people = ("Liz", "Andy", "Bob")
print(people)
# ('Liz', 'Andy', 'Bob')
test = ("Jim")
print(test)
# Jim
test2 = ("Jim", )
print(test2)
# ('Jim',)

條件判斷

使用if...:...else:...

height = 24
if height > 30:
print("1")
elif height > 5:
print("2")
else:
print("3")
# 2
# 只要x是非零數值、非空字符串、非空list等,就判斷為True,否則為False。
if x:
print('True')
# 輸入
input()
# 字符串轉換為整數
int()

循環

for…in循環

food = ["apple", "nut", "coke"]
for item in food:
print(item)
# apple
# nut
# coke
# 0-num的整數序列
range(num)

while循環

num = 2
all = 3
while all > 0:
num = num * num
all = all - 1
print(num)
# 256

break打斷循環

num = 2
all = 3
while all > 0:
num = num * num
all = all - 1
if all < 2:
break
print(num)
# 16

continue跳過循環

n = 0
while n < 5:
n = n + 1
if n%2 == 0:
continue
print(n)
# 1
# 3
# 5

dict和set

dict

dict全稱dictionary,同map,使用鍵-值(key-value)存儲,方便快速查找信息。

info = {
"name": "Liz", "age": "18", "weight": "44kg"}
print(info["name"])
# Liz
info["height"] = "160cm"
print(info)
# {'name': 'Liz', 'age': '18', 'weight': '44kg', 'height': '160cm'}
print(info.get("height"))
# 160cm
print(info.pop("name"))
# Liz
print(info)
# {'age': '18', 'weight': '44kg', 'height': '160cm'}

set

一組key的集合,但不存儲value,元素不能重復。

s = set([1, 2, 3, 2])
print(s)
# {1, 2, 3}
s.add(4)
s.remove(1)
print(s)
# {2, 3, 4}
a = set([1, 2, 5])
print(a & s)
# {2}
print(a | s)
# {1, 2, 3, 4, 5}

函數

python內置方法 官方

# python內置函數,abs(),求絕對值
print(abs(-10))
# 10

自定義函數:在Python中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,然後,在縮進塊中編寫函數體,函數的返回值用return語句返回。

def my_abs(x):
# isinstance()類型錯誤報錯
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
print(my_abs(-2))
# 2
# 空函數pass,函數占位符
if a > 10:
pass

參數

位置參數

def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
print(power(5, 2))
# 25

默認參數

必選參數在前,默認參數在後。
默認參數必須指向不變對象

def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
print(power(5))
# 25

可變參數

def calc(*numbers):
sum = 0
for x in numbers:
sum = sum + x*x
return sum
print(calc(1, 2, 3))
# 14
nums = [1, 2, 3]
print(calc(*nums))
# 14

關鍵字參數

def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
print(person("Liz", 18))
# name: Liz age: 18 other: {}
# None
extra = {
'city': 'Beijing', 'job': 'Engineer'}
print(person('Jack', 24, **extra))
# name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
# None

命名關鍵字參數

分隔符*後面的參數為命名關鍵字參數

def person(name, age, *, city, job):
print(name, age, city, job)
person('Jack', 24, city='Beijing', job='Engineer')
# Jack 24 Beijing Engineer

數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數

def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
f1(1, 2, 3, 'a', 'b', x=99)
# a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}

遞歸函數

遞歸

計算1x2x3x4x……n

def fact(n):
if n == 1:
return 1
return n * fact(n-1)
print(fact(3))
# 6

尾遞歸

def fact(n):
return fact_iter(n, 1)
def fact_iter(num, product):
if num == 1:
return product
return fact_iter(num - 1, num * product)
print(fact(3))
# 6

高級特性

切片

取對象n-mObj[n:m:l](不包含m,每l個數取一個),n=0時可以省略。

people = ["Andy", "Lily", "Popi", "Uu", "Wendy"]
print(people[:4:2])
# ['Andy', 'Popi']
food = ("apple", "nuts", "banana", "strawberry", "chicken")
print(food[:3])
# ('apple', 'nuts', 'banana')
print("asdfghjkl"[::2])
# adgjl

迭代Iteration

使用for...in...循環迭代,in的內容需要判斷是否是可循環迭代。

from collections.abc import Iterable
print(isinstance('asdf', Iterable))
# True

列表生成式

for前面的if ... else是表達式,而for後面的if是過濾條件,不能帶else

# 生成1-4
print(list(range(1, 5)))
# [1, 2, 3, 4]
# 生成1*1-4*4
print(list(i*i for i in range(1,5)))
# [1, 4, 9, 16]
# 小寫、去掉非字符串
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [x.lower() for x in L1 if isinstance(x, str)]
# ['hello', 'world', 'apple']

生成器generator

一邊循環一邊計算的機制。有以下方法生成生成器:

  1. 將列表生成式的[]改成()
g = (x * x for x in range(3))
print(g)
print(next(g))
# <generator object <genexpr> at 0x000001BD81FC1270>
# 0
for i in g:
print(i)
# 0
# 1
# 4
  1. 一個函數定義中包含yield關鍵字

函數式編程

函數

函數的變量可以是函數,返回也可以是函數。

def add(x, y, f):
return f(x) + f(y)
print(add(-5, 6, abs))
# 11

map

map(轉換規則,即將被轉換的參數)

def fn(x):
return x*x
print(list(map(fn, [1, 2, 3, 4])))
# [1, 4, 9, 16]
print(list(map(str, [1, 2, 3, 4])))
# ['1', '2', '3', '4']

reduce

from functools import reduce
def add(x, y):
return x + y
print(reduce(add, [1, 2, 3, 4]))
# 10

sorted()

sorted(對象,key函數制定的規則,reverse=True)key規則,可省略,reverse=True反向排序,可省略

print(sorted([36, 5, -12, 9, -21], key=abs))
# [5, 9, -12, -21, 36]

返回函數

def calc_sum(*args):
def sum():
n = 0
for i in args:
n = n + i
return n
return sum
f = calc_sum(1, 2, 3, 4)
print(f)
# <function calc_sum.<locals>.sum at 0x0000018038F1E160>
print(f())
# 10

形成閉包,注意:返回函數不要引用任何循環變量,或者後續會發生變化的變量。

lambda匿名函數

匿名函數lambda 參數:返回值 # 無return,沒有名字,不用擔心函數名沖突。

f = lambda x: x * x
print(f)
# <function <lambda> at 0x000001BF94BFE0D0>
print(f(5))
# 25

裝飾器

def fn():
print('fn呀')
fn()
# fn呀
print(fn.__name__) # 函數__name__屬性,拿到函數的名字
# fn
# 定義一個打印日志的decorator
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
@log
def fn():
print('fn呀')
fn()
# call fn():
# fn呀

爬取豆瓣網栗子

https://github.com/ChestnutNeko/pythonStudy/blob/main/douban.py


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved