本文介绍Python3变量类型中的Numbers数字、String字符串类型
注释
单行注释:以#开头
多行注释:使用三个单引号 或 双引号
1 2 3 4 5 6 7 8 9
| """ 使用三个双引号的 多行注释 """
''' 使用三个单引号的 多行注释 '''
|
Hello World
# coding=utf-8 用于声明python源文件的编码格式。因为只有声明了文件的编码格式,python解释器才知道使用何种方式对源文件进行解码。由于python 3默认源文件编码采用的是utf-8格式。故当源文件使用utf-8编码时,上述文件编码格式声明可以省略
1 2 3 4 5
|
print("Hello, World!") print("I'm Aaron")
|
变量类型
Numbers 数字
Python 3的数字类型具体有:int整型、float浮点型、bool布尔型、complex复数。特别地:
- Python 2中有int、long类型。而在Python 3没有long类型,且对int类型没有大小限制。故可以直接当作long类型使用
- Python 3中, bool是int的子类。故True、False可以和数字进行运算,分别代表1、0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| num1 = 24 num2 = 2
num3 = 2.0 num4 = 1.23
b1 = True b2 = False
apple_count = 1_0000_000 orange_count = 22_2 apple_price = 3.20_21 orange_price = 89_123.22
|
常见的数学运算符如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| num1 = 24 num2 = 2 num3 = 2.0
print("--------- 加减乘除运算 -------------") print("2+24:", num2+num1) print("2-24:", num2-num1) print("2*24:", num2*num1)
print("24/2:", num1/num2) print("(24+2) * 4:", (num1+num2) * 4)
print("--------- 幂运算 -------------") print("2的3次方:", 2**3)
print("--------- 取模运算 -------------") print("27%10 : ", 21%10)
print("--------- 整除运算 -------------")
print("9//3 : ", 9//3) print("9//2 : ", 9//2) print("-9//2 : ", -9//2) print("9//-2 : ", 9//-2)
print("--------- 浮点运算 -------------")
print("24+2.0:", num1+num3) print("24*2.0:", num1*num3) print("3*0.1:", 3*0.1)
|
在Python 3中, bool是int的子类。故True、False可以和数字进行运算,分别代表1、0。故对于bool布尔型变量可通过is身份运算符(是否指向同一个对象)来判断类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| b1 = True b2 = False
print("变量 b1 是否为 int类型及其子类: ", isinstance(b1, int))
print("---------------- ==运算符: 判断值是否相等 -------------------------") print("b1<True>==1 : ", b1==1, ", b1<True>==True: ", b1==True) print("b2<False>==0 : ", b2==0, ", b2<False>==False: ", b2==False)
print("------ 布尔变量可以和数字进行运算, True、False分别代表1、0 ---------") print("b1<True> + 9 : ", b1+9) print("b2<False> * 9 : ", b2*9)
print("-------- is身份运算符: (是否指向同一个对象)来判断类型 -----------------") print("b1<True> is 1 :", b1 is 1, ", b1<True> is True :", b1 is True ) print("b2<False> is 0 :", b2 is 0, ", b2<False> is False :", b2 is False)
|
String 字符串
Python 3中可使用单引号 或 双引号包裹来表示字符串;
此外,还可以使用f-string 格式化(format)字符串,实现在字符串中使用指定变量的值进行替换;
此外,为避免对字符串中的反斜杠\进行转义,还可以使用raw string原始字符串。其通常用于处理字符串中存在多个反斜线的情况。典型地场景有:正则表达式、目录路径等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| name = "aaron zhu" sex = '男性' print("my name:", name, "my sex:", sex)
print("--------- f-string 格式化(format)字符串 -------------------") first_name = "Bob" last_name = "Wang"
full_name = f"my full name is {first_name} {last_name}" welcome_msg = f'Hello, {full_name}' print( full_name ) print( welcome_msg )
print("--------- raw string 原始字符串 -------------------") msg1 = "He say.\nLet\'s go. Bye~" print("msg 1:",msg1)
msg2 = r"He say.\nLet\'s go. Bye~" print("msg 2:",msg2) msg3 = R"He say.\nLet\'s go. Bye~" print("msg 3:",msg3)
|
字符串常见操作函数如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| print("--------------- 字符串切片 ---------------")
name = "AaronZhu" print("first char:", name[0], "last char: ", name[-1]); print("last name:", name[5:]); print("first name:", name[0:5]);
print("--------------- 大小写转换 ---------------") name = "aaron zhu" print("每个单词的首字母变为大写:", name.title()) print("字母全部变为小写:", name.lower()) print("字母全部变为大写:", name.upper())
print("--------------- 删除多余空格 ---------------") name = " Aaron Zhu " print("删除字符串两侧的空格:", name.strip(), "END" ) print("删除字符串左侧的空格:", name.lstrip(), "END" ) print("删除字符串右侧的空格:", name.rstrip(), "END" )
print("--------------- 删除前后缀 ---------------") baidu_url = "https://www.baidu.com" print("删除指定前缀:", baidu_url.removeprefix("https://") ) print("删除指定后缀:", baidu_url.removesuffix(".com") )
print("--------------- 分隔字符串 ---------------") delimiter = "." name = "Bob.Aaron.tony" names = name.split(delimiter) print("names:", names)
print("--------------- 连接字符串 ---------------") delimiter = "/" names = ["home", "bin", "test", "tool"]
join_res = delimiter.join(names) print("join_res:", join_res)
|
关于字符串格式化,这里补充说明下f-string 格式化(format)字符串是Python 3.6中才新引入的。在此之前格式化字符串主要有两种办法:古老的繁琐的%运算符格式化字符串、Python 2.6 版本中引入的str.format()方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| name = "Luca" age = 18 weight = 66.66 likes = ["阅读","旅行","运动"]
my_info1 = "我叫%s, 芳龄%d岁。体重只有%.4f公斤。我喜欢%s" % (name, age, weight, likes) print("my info 1: ", my_info1)
my_info2 = "我叫{}, 芳龄{}岁。体重只有{}公斤。我喜欢{}".format(name, age, weight, likes) print("my info 2: ", my_info2)
|
类型判断:type函数、isinstance函数
- type函数: 获取变量的实际类型
- isinstance函数: 判断某变量是否为指定类型及其子类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| name, age, weight, is_man = "WangBob", 23, 61.52, True
print("我的姓名是%s, 我的年龄是%d, 我的体重是%.2fKg, 我的性别是男的:%s " %(name, age, weight, is_man))
print("-------------- type 函数 ------------------------")
print("变量name的类型: ",type(name) ); print("变量age的类型: ",type(age) ); print("变量weight的类型: ", type(weight) ); print("变量is_Man的类型: ", type(is_man) );
print("-------------- isinstance函数 ------------------------")
print("变量name 是否为 str类型及其子类: ", isinstance(name, str)) print("变量age 是否为 int类型及其子类: ", isinstance(age, int)) print("变量weight 是否为 float类型及其子类: ", isinstance(weight, float)) print("变量weight 是否为 int类型及其子类: ", isinstance(weight, int)) print("变量is_Man 是否为 bool类型及其子类: ", isinstance(is_man, bool)) print("变量is_Man 是否为 int类型及其子类: ", isinstance(is_man, int))
|
脚本执行方式
当我们以脚本方式运行python时,与其他语言脚本类似。我们通常有两种方式:
- 将脚本文件作为可执行程序来运行。例如:./hello.py
- 将脚本文件作为参数传递给解释器运行。例如:python3 hello.py
第一种方式下,我们需要在脚本的第一行指定解释器信息。用于告知系统该脚本使用何种解释器进行执行。语法为 #!解释器的路径信息。同时,必须给该脚本添加x执行权限
1 2 3
| #!/usr/local/bin/python3
print("Hello World")
|
而在第二种方式下,不仅无需在脚本文件第一行指定解释器信息(写了也没用),而且也无需给该脚本添加x执行权限。下图中我们直接在脚本文件第一行指定了错误的解释器信息,也不会影响它的运行。进一步证明了其不会被使用
参考文献
- Python编程·第3版:从入门到实践 Eric Matthes著
- Python基础教程·第3版 Magnus Lie Hetland著
- 流畅的Python·第1版 Luciano Ramalho著