mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-04-30 11:29:29 +08:00
new post
This commit is contained in:
parent
bd40930dd1
commit
caa4ee96ee
1 changed files with 321 additions and 0 deletions
321
urara/2023-09-04-python/+page.md
Normal file
321
urara/2023-09-04-python/+page.md
Normal file
|
@ -0,0 +1,321 @@
|
||||||
|
---
|
||||||
|
title: Python 初学笔记
|
||||||
|
created: 2023-09-04
|
||||||
|
summary: Note of 《Python As Fast as Possible - Learn Python in ~75 Minutes》
|
||||||
|
tags:
|
||||||
|
- 笔记
|
||||||
|
- Python
|
||||||
|
---
|
||||||
|
教程:[Python As Fast as Possible - Learn Python in ~75 Minutes](https://www.youtube.com/watch?v=VchuKL44s6E)
|
||||||
|
|
||||||
|
- [GitHub - kyclark/tiny\_python\_projects: Code for Tiny Python Projects (Manning, 2020, ISBN 1617297518). Learning Python through test-driven development of games and puzzles.](https://github.com/kyclark/tiny_python_projects)
|
||||||
|
|
||||||
|
## 交互式
|
||||||
|
输入
|
||||||
|
```bash
|
||||||
|
python3
|
||||||
|
```
|
||||||
|
看到prompt提示符`>>>` 就进入交互模式了
|
||||||
|
|
||||||
|
- `<Control>`-`P `(previous)
|
||||||
|
- `<Control>`-`N` (next).
|
||||||
|
- `<Control>`-`D` exits a session
|
||||||
|
|
||||||
|
- 工具:
|
||||||
|
- [Project Jupyter | Home](https://jupyter.org)
|
||||||
|
- 教程:
|
||||||
|
- [practical python](https://dabeaz-course.github.io/practical-python/)
|
||||||
|
- [PEP 20 – The Zen of Python | peps.python.org](https://peps.python.org/pep-0020/)
|
||||||
|
- 书籍
|
||||||
|
- [[流畅的Python]]
|
||||||
|
|
||||||
|
## 数据类型
|
||||||
|
- Int
|
||||||
|
- Float
|
||||||
|
- String
|
||||||
|
- Bool
|
||||||
|
|
||||||
|
## Arithmetic Operator
|
||||||
|
- will always reture a float number
|
||||||
|
- `int(x/y)` => int
|
||||||
|
- 幂运算: `x ** y` => `2**3 = 8`
|
||||||
|
- 开跟号:`x //y` => `10 // 3 ` => 3 因为返回的是int,会自动取整
|
||||||
|
- 求余 `x % y`
|
||||||
|
|
||||||
|
## String Method
|
||||||
|
- `.upper()`
|
||||||
|
- `.lower()`
|
||||||
|
- `.capitalize()`
|
||||||
|
- 首字大写
|
||||||
|
- `.count()`
|
||||||
|
- `'Hello'.count('ll) = 2`
|
||||||
|
- mutiply strings
|
||||||
|
- `'hello' * 3 = 'hellohellohello`
|
||||||
|
- `'hello' + 'yes' = 'helloyes`
|
||||||
|
- `.replace()`
|
||||||
|
- `.split()` 分割
|
||||||
|
- 和JS中[[split]]的区别:
|
||||||
|
- 当split里面没有任何参数的时候,JS中会将字符串切割成单个字符
|
||||||
|
- 而Python会按照空格分割(By default any whitespace is a separator[^1])
|
||||||
|
## Conditional Operators
|
||||||
|
return -> `True` / `False`
|
||||||
|
- ==
|
||||||
|
- !=
|
||||||
|
- `>=`
|
||||||
|
- `<=`
|
||||||
|
- `>`
|
||||||
|
- `<`
|
||||||
|
|
||||||
|
- 可以比较字符串,通过比较ASCI码
|
||||||
|
- `.orc('a')` 求得某个字符串的ASCI值
|
||||||
|
- 如果有几个字符串的话,逐一比较
|
||||||
|
|
||||||
|
## Chained Conditionals
|
||||||
|
- and
|
||||||
|
- or
|
||||||
|
- not
|
||||||
|
- order
|
||||||
|
1. nor
|
||||||
|
2. and
|
||||||
|
3. or
|
||||||
|
|
||||||
|
## If/Else/Elif
|
||||||
|
```py
|
||||||
|
if x == 'Tim':
|
||||||
|
print('You are great')
|
||||||
|
elif x == 'joe':
|
||||||
|
print('Bye joe!')
|
||||||
|
else:
|
||||||
|
print('No')
|
||||||
|
```
|
||||||
|
|
||||||
|
js
|
||||||
|
```js
|
||||||
|
if(x === 'tim') {
|
||||||
|
console.log('You are great')
|
||||||
|
} else if (x === 'joe') {
|
||||||
|
console.log('Bye joe!')
|
||||||
|
} else {
|
||||||
|
console.log('No')
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## List/Tuples
|
||||||
|
- List
|
||||||
|
- 类似JS中的 [[数组|array]]
|
||||||
|
- `.list()`
|
||||||
|
- `x = [4, True, 'hi']`
|
||||||
|
- `x[index]`
|
||||||
|
- `.len()`
|
||||||
|
- 返回长度
|
||||||
|
- string also works
|
||||||
|
- `.append()`
|
||||||
|
- 在末尾加值
|
||||||
|
- `.extend([])`
|
||||||
|
- 扩展数组,在末尾加值
|
||||||
|
- `.pop(index)`
|
||||||
|
- remove the last element and return it
|
||||||
|
- list is mutable
|
||||||
|
- deepcopy
|
||||||
|
- `y = x[:]
|
||||||
|
- tuples
|
||||||
|
- TS中的 tuple
|
||||||
|
- immutable
|
||||||
|
- `y = (1,2,3,5)`
|
||||||
|
- nesting
|
||||||
|
- `x=[[],(),[]]`
|
||||||
|
|
||||||
|
## for loops
|
||||||
|
```py
|
||||||
|
for i in range(10)
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
x = [1,2,3,5,67]
|
||||||
|
for i in range(len(x))
|
||||||
|
print(x[i])
|
||||||
|
|
||||||
|
for i,element in enumerate(x):
|
||||||
|
print(i,element)
|
||||||
|
// 0 1
|
||||||
|
// 1 2
|
||||||
|
// 2 3
|
||||||
|
// 3 5
|
||||||
|
// 4 67
|
||||||
|
```
|
||||||
|
|
||||||
|
- `.range()`
|
||||||
|
- arguments:
|
||||||
|
- stop
|
||||||
|
- start, stop
|
||||||
|
- start, stop, end
|
||||||
|
- not includes start and stop
|
||||||
|
- `enumerate`
|
||||||
|
- enumerate()是Python中的一个内置函数,用于将一个可迭代对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中
|
||||||
|
|
||||||
|
## While
|
||||||
|
```bash
|
||||||
|
while True:
|
||||||
|
print('run')
|
||||||
|
i += 1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Slice
|
||||||
|
切割数组
|
||||||
|
```py
|
||||||
|
x = [0,1,2,3,4,5,6,7,8]
|
||||||
|
slice = x[0,4,2]
|
||||||
|
// slice = [0,2]
|
||||||
|
```
|
||||||
|
- `slice = x[start:stop:step]`
|
||||||
|
- `x[:stop]`
|
||||||
|
- `x[start:]`
|
||||||
|
- `x[start:stop]`
|
||||||
|
- step默认为1
|
||||||
|
- reverse a list: `x[::-1]`
|
||||||
|
|
||||||
|
## Sets
|
||||||
|
unorder unique list
|
||||||
|
```py
|
||||||
|
x = set()
|
||||||
|
s = { 2,3,4,5 } //set
|
||||||
|
s2 = { 6 }
|
||||||
|
s = { } // dict
|
||||||
|
print( 4 in s) => boolean
|
||||||
|
print(s.union(s2)) // => {2,3,4,5,6}
|
||||||
|
```
|
||||||
|
- `.add()`
|
||||||
|
- `.remove()`
|
||||||
|
- `.union`:合并set
|
||||||
|
- `.difference`:比较差异
|
||||||
|
- `.intersection`: 交集
|
||||||
|
|
||||||
|
## Dicts
|
||||||
|
```py
|
||||||
|
x = {'key': 4}
|
||||||
|
x['key2'] = 5
|
||||||
|
print( 'key' in x) // => True
|
||||||
|
|
||||||
|
//删除
|
||||||
|
del x['key']
|
||||||
|
```
|
||||||
|
- `.value()`
|
||||||
|
- 获取所有values
|
||||||
|
- `.update()`[^2]
|
||||||
|
- update() 方法用于将一个字典的键值对更新到另一个字典中。
|
||||||
|
- Update the dictionary with the key/value pairs from other, overwriting existing keys. Return None.
|
||||||
|
- update() accepts either another dictionary object or an iterable of key/value pairs (as tuples or other iterables of length two). If keyword arguments are specified, the dictionary is then updated with those key/value pairs: d.update(red=1, blue=2).
|
||||||
|
|
||||||
|
## Comprehensions
|
||||||
|
```py
|
||||||
|
x = [ x for x in range(5)]
|
||||||
|
x =[[0 for x in range(100)] for x in range(5)]
|
||||||
|
x = { i for i in range(100) if i % 5 == 0 }
|
||||||
|
```
|
||||||
|
|
||||||
|
## Function
|
||||||
|
|
||||||
|
```py
|
||||||
|
def func(x,y,z=None):
|
||||||
|
print('Run',x,y,z)
|
||||||
|
return x * y , x /y
|
||||||
|
r1, r2 = func(10,5)
|
||||||
|
func()
|
||||||
|
```
|
||||||
|
|
||||||
|
## Unpack Operator /* Args and ** Kwargs
|
||||||
|
- `*x`
|
||||||
|
- 类似于JS中的`...`
|
||||||
|
- 用于list
|
||||||
|
```py
|
||||||
|
def fun(x,y):
|
||||||
|
print(x,y)
|
||||||
|
|
||||||
|
pairs = [(1,2),(3,4)]
|
||||||
|
for pair in pairs
|
||||||
|
fun(*pair)
|
||||||
|
```
|
||||||
|
|
||||||
|
- `**x`
|
||||||
|
- key word argumens
|
||||||
|
- 用于dict
|
||||||
|
```py
|
||||||
|
def fun(x,y):
|
||||||
|
print(x,y)
|
||||||
|
|
||||||
|
for(**{'x':2, 'y': 5})
|
||||||
|
// 顺序不一也可以
|
||||||
|
```
|
||||||
|
|
||||||
|
## Scope & Globals
|
||||||
|
- 函数内有局部作用域
|
||||||
|
- 用`globel` 可以将局部变量变成全局变量
|
||||||
|
```py
|
||||||
|
def func():
|
||||||
|
global x
|
||||||
|
return x
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Exceptions
|
||||||
|
- 意外事件,相当于JS中的`throw new Error('')`
|
||||||
|
- 会打断程序的正常执行流程
|
||||||
|
```py
|
||||||
|
raise Exception('Bad')
|
||||||
|
raise FileExistsError('')
|
||||||
|
```
|
||||||
|
常见的异常类型有:
|
||||||
|
- StopIteration - 迭代器没有更多的值
|
||||||
|
- ImportError - 导入模块失败
|
||||||
|
- IndexError - 序列中找不到给定的索引
|
||||||
|
- KeyError - 映射中找不到给定的键
|
||||||
|
- ValueError - 传入无效的参数
|
||||||
|
- TypeError - 对类型无效的操作
|
||||||
|
- FileNotFoundError - 未找到文件
|
||||||
|
- KeyboardInterrupt - 用户中断执行
|
||||||
|
## Handling Exceptions
|
||||||
|
|
||||||
|
```py
|
||||||
|
try:
|
||||||
|
x = 7 /0
|
||||||
|
expect Exception as e
|
||||||
|
print(e)
|
||||||
|
finally:
|
||||||
|
print('finally')
|
||||||
|
```
|
||||||
|
|
||||||
|
## Lambda
|
||||||
|
lambda是Python中的匿名函数。它可以有多个参数,但只能有一个表达式。
|
||||||
|
```py
|
||||||
|
x = lambda x: x + 5
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Map and Filter
|
||||||
|
- Map: 跟JS的[[map()]] 差不多
|
||||||
|
- 返回map object
|
||||||
|
```py
|
||||||
|
x = [0,1,2,3,4,5,6,7,8]
|
||||||
|
|
||||||
|
mp = map(lambda i : i +2 , x)
|
||||||
|
// js : const mp = x.map((i)=> i+1)
|
||||||
|
print(list(mp))
|
||||||
|
|
||||||
|
mpf = filter(lambda i : i === 2 , x)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## F Strings
|
||||||
|
- 类似于JS中的 [[template literal]]
|
||||||
|
```py
|
||||||
|
tim = 89
|
||||||
|
x = f'hello {6+8}'
|
||||||
|
// js
|
||||||
|
// x = `hello ${6+8}`
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Buildin Functions
|
||||||
|
- [[vars()]]
|
||||||
|
|
||||||
|
[^1]: [Python String split() Method](https://www.w3schools.com/python/ref_string_split.asp)
|
||||||
|
[^2]: [Built-in Types — Python 3.11.4 documentation](https://docs.python.org/3/library/stdtypes.html?highlight=update#dict.update)
|
Loading…
Reference in a new issue