mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-04-30 15:19:31 +08:00
321 lines
No EOL
6.3 KiB
Markdown
321 lines
No EOL
6.3 KiB
Markdown
---
|
||
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) |