Day 04 Python 进阶

这篇主要是讲一些比较深入的东西,偶尔才会碰到一次的东西,基本上是按照我现在碰到的机率由高至低排序的。

1. Python 命名规则

在 Python 中有关类别、函数以及变数的名称并没有限制如何命名,但是按照规则命名会更快更容易解读 code,尤其是遇到较大型的专案时。基本规则如下:

一定要遵守的:

  • 允许 a-z A-z 0-9 和 _ , 但是 开头不可为数字 (开头也尽量不要是下底线,开头为下底线大多都有特殊用途)
  • 比较特殊的
    • 特殊的变数, 开头和结尾都加 两个下底线 , ex: __init__
    • 特殊的 class — 使用 单下底线或双下底线
    • 开头单下底线 — 用在 private 的 method or variable
    • 结尾单下底线 — 用在避免和 python keyword 的冲突 ex: str_
    • 开头双下底线 — 会触发 name mangling, 用在 class definition, 不常使用

要注意的:

  • 变数区分大小写
  • 变数长度没有限制

推荐的方式:

类型 方式 范例
Local variable 一律小写,文字串接的时候使用下底线 val_name = 123
Globals(全域变数), Constants(常数) 一律大写 PI=3.14
function(函数) 一律小写,文字串接的时候使用下底线 def add():
Class(类别) 单字开头第一个字大写,其余小写,文字串接不使用下底线 ClassName
Module(模组), Package(套件) 一律小写(J些下下下一篇会讲到) module.py

2. Python 中没有 Null 而是 None

3. range

range(start, end, step),最少要有 end 。如果只输入两个数字,那两个会是 start 跟 end。

4. 字串格式化

如果一个字串中有需要插入较多的变数,要组合在一起就比较麻烦,例如:

''' Input '''
name = 'ithome'
year = 2021
month = 9
day = 4
weight = 58.5
height = 163

print('My name: ' + name + '\nToday: ' + str(year) + '/' + str(month) + '/' + str(day) + '\nMy height: ' + str(height) + '\nMy weight: ' + str(weight))


''' Output '''
My name: ithome
Today: 2021/9/3
My height: 163
My weight: 58.5

像这样要组合起来就比较麻烦,不过 Python 中提供了一个方便好用的字串格式化方式 .format() ,可以将字串中要带入值得位置用大括号括起来,然後再 format() 的小括号中填入想要的值。例如:

''' Input '''
name = 'ithome'
year = 2021
month = 9
day = 3
weight = 58.5
height = 163

print('My name:{}'.format(name))
print('Today:{y}/{m}/{d}'.format(y=year, m=month, d=day))
print('My height:{1:>6d}\nMy weight:{0:>6.2f}'.format(weight, height))


''' Output '''
My name:ithome
Today:2021/9/3
My height:   163
My weight: 58.50

知道後可已用得更顺手的东西:

  • : 前面可以使用索引值或 key-value 进行取值,後面可以加格式化方式,也可都不使用。
  • {:<} , {:^} , {:>} 是左、中、右对齐。
  • {:+} 表示带正负号。
  • 输入数字可指定占多少空间(像上面那个 My height )
  • {:d}{:f}{:e} or {:E}{:x} or {:X}{:o}{:b} 分别是整数、浮点数、科学记号(大小写)、十六进位(大小写)、八进位、二进位
  • {:,} 的方式以逗号分隔数字(千分位) ex: print('{:,}'.format(123456)) # 123,456
  • {:%} 输出百分比(自动乘100) ex: print('{:.0%}'.format(0.3)) # 30%
  • 可以用 {:%?} 的方式输出日期时间,有 * 表示根据地区会有不同的输出,例如:
    • %a 星期缩写
    • %A 星期全写
    • %w 星期数字
    • %d 日期
    • %b 月份缩写 *
    • %B 月份全写 *
    • %m 月份数字
    • %y 西元年二位数字
    • %Y 西元年四位数字
    • %H 24小时制
    • %I 12小时制
    • %p AM 或 PM *
    • %M
    • %S
    • %f 微秒六位数字
    • %c 日期和时间 *
    • %x 日期 *
    • %X 时间 *

5. string 前缀 u, r, b, f

u -> unicode (会处理跳脱字元) | Python 预设字串编码方式
r -> 非转义原生字元 (不会处理跳脱字元)
b -> bytes位元组
f -> 在字串内支援大括号内的 Python 表示式 (就是指第四点)

''' 如果这样输入 '''
name = 'ithome'
str_default = 'Hello {name} \n Welcome'
str_u = u'Hello {name} \n Welcome'
str_r = r'Hello {name} \n Welcome'
str_b = b'Hello {name} \n Welcome'
str_f = f'Hello {name} \n Welcome'


''' 每个输出就会像这样 '''
# Input
print(str_default)
# Output
Hello {name}
 Welcome

# Input
print(str_u)
# Output
Hello {name}
 Welcome

# Input
print(str_r)
# Output
Hello {name} \n Welcome

# Input
print(str_b)
# Output
b'Hello {name} \n Welcome'

# Input
print(str_f)
# Output
Hello ithome
 Welcome

bytes 这边可能看不太出来,搭配第六点看会更清楚。

:::info
常用跳脱字元

字元 意义
\\ 反斜线 \
\' 单引号 '
\" 双引号 "
\b 空格(BS)
\n 换⾏(LF)
\r 回车(CR)
\t 水平缩排(TAB)
\f 换页(FF)
0o?? 8进位(数字零跟英文小写O)
0x?? 16进位(数字零跟英文小写X)

:::

6. Encode and Decode

在 Python 中 str 预设是使用 unicode 进行资料处理的。不过在某些情况,需要将 unicode 转换为其他格式,所以就需要使用到编解码。

s = '你好'

# Input
print(s.encode('utf-8'))
# Output
b'\xe4\xbd\xa0\xe5\xa5\xbd'

# Input
print(s.encode('big5'))
# Output
b'\xa7A\xa6n'

参考资料

Python Format String 字串格式化整理

那麽进阶的就大概这样,主要是可以将常用的东西中,处理起来比较麻烦的东西简单处理掉的部分。

大家掰~掰~


<<:  冒险村04 - Create PR with default template

>>:  [履历]用简报让面试官集中注意力

Eloquent ORM - 读取资料

读取表单中的所有资料 接下来的步骤将把 todo 表单中的资料取出展示在 Dashboard 上。 ...

初学者跪着学JavaScript Day17: 物件:new Set()

一日客语:中文:不好意思 客语:paiˇse! ㄆㄞˇ 厶ㄟ 1.set 是一个集合 2.集合没有索...

Day 23 Object oriented programming

物件导向程序设计是程序设计中极为重要的一环,其基本概念为物件及类别。 类别定义事物的特点,物件为事件...

Day 13 - Rancher 专案管理指南 - 资源控管

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...