首先,为什么要学python呢?
有目标才有动力!
目标:学会基础python,学会爬虫,可以在百度上爬下来一篇小说或诗词。
Python下载
cmd执行python查看是否安装成功,出现版本号则安装成功。
跟着廖雪峰老师的教程过了一遍,Python教程 by 廖雪峰。
VSCode创建 0322.py文件。
cmd中执行。找到0322.py的目录,python 0322.py
执行代码。
# 输出 print("hello python") # 输入 name = input("please enter your name:") print("name:", name)
整数、浮点数、字符串、布尔值(True
、False
)、空值(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%
内置数据类型
元素类型可以不同,也可以嵌套,如:["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无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()
food = ["apple", "nut", "coke"] for item in food: print(item) # apple # nut # coke # 0-num的整数序列 range(num)
num = 2 all = 3 while all > 0: num = num * num all = all - 1 print(num) # 256
num = 2 all = 3 while all > 0: num = num * num all = all - 1 if all < 2: break print(num) # 16
n = 0 while n < 5: n = n + 1 if n%2 == 0: continue print(n) # 1 # 3 # 5
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'}
一组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-m
,Obj[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
使用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']
一边循环一边计算的机制。有以下方法生成生成器:
[]
改成()
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
yield
关键字函数的变量可以是函数,返回也可以是函数。
def add(x, y, f): return f(x) + f(y) print(add(-5, 6, abs)) # 11
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']
from functools import reduce def add(x, y): return x + y print(reduce(add, [1, 2, 3, 4])) # 10
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 参数:返回值 # 无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