基础语法概念学习(第一部分):
1.基础入门学习语法
1.1基础知识的准备
python的代码编写一定要按照pep8的代码规范来。
python的变量修改值不是修改变量指向内存的值,而是重新开辟一个内存空间,把修改的值存入后,后重新把变量指向后修改的内存空间,之前的内存空间由python的垃圾回收机制释放(与C语言不同)
我在这里声明一下,函数和变量,都使用驼峰命名法进行命名,但是两者有区别:函数,方法等使用驼峰命名法的首部英文字母必须大写;但是变量的命名时,首部英文字母必须小写,(但是再定义类的时候,首部英文字母必须大写),再定义全局变量的时候,变量名后面可以加入_g进行区分(此条规则不强制规定 可以自行选择)。
1.2 四大基础数据类型
首先需要明确python里面有8大数据类型,再本小结中将详细介绍基础四大数据类型分别是:整形,浮点型,布尔,字符串。可以使用type(data)可以得到该数据的数据类型。但是注意一切的数据类型都是类(class)。
1.2.1 整形(int)
python中所有定义的整形变量都是int,有且只有一种数据类型。64位python并且最少一个整形变量需要24个字节,并且随着数据的增大,所占的字节也会增大,并且每次增量都是4个字节。32位python存一个整形变量最少需要12个字节,并且每次增量位2个字节。可以使用sys.getsizeof(data)这个函数获取变量的字节数。
print(sys.getsizeof(0)) #得到的值为24个字节
print(sys.getsizeof(1)) #得到的值为28个字节
1.2.2 浮点型(float)
python中定义的浮点数类型也只有一种float,64位python中定义的位8个字节的双精度浮点数(8个字节)(类似于C语言中的Double变量),32位python中定义的浮点数类型是4字节的单精度变量(类似于C语言中的float变量)。在64位python在,浮点数这个类所占的字节数是24个字节,因为其中不仅包括了存储的数据量,还有一些索引,指针等,在本文不做具体展开了,有需要的可以阅读python源码。浮点数所包含的有效数字位是17位小数精度。
print(sys.getsizeof(1.01)) #得到的字节长度位24个字节
如下列代码所演示的,这是python表示小数的另一种方式
print(2E3) #表示的值位200.0
print(3E-1) #表示的值位0.3
在一些特殊的领域,可以引入 decimal 模块,用来提高浮点数的精度
import decimal
a = decimal.Decimal("10.0")
b = decimal.Decimal("3")
print(a/b) #输出的为:3.333333333333333333333333333
print(10/3) #输出的为:3.3333333333333335
但是在一些特殊的领域,不需要近似值,需要的是准确值的时候,也就是 decimal 也无法满足需求的时候,就可以使用 fractions 模块进行开发使用。在这里提醒一下,在实际的开发中,一定要注意数据的精度问题,尤其是对精度要求较高的项目中。
from fractions import Fraction
print(10/3) #输出的为:3.3333333333333335
print(Fraction(10,3)) #输出的为:10/3
1.2.3 布尔(bool)
在python中bool的数据类型,只有两个值 True or False。布尔的数据类型主要用于条件分支语句的判断中(自我感觉最大的用处),布尔数据类型的值主要是通过比较表达式赋值,当然可以直接给值(一般是在初始化的时候进行初始化给值)。bool的数据类型所占的字节数也为28个字节(相当于整形变量1的字节长度)。
print( 2 == 1) #这就是一个标准的比较表达式
temp = True # True 和 False 是 python的两个关键字
print(sys.getsizeof(temp)) #输出的值: 28个字节
# 条件语句的用法 一个简单的小例子
if( 1 == 1)
print("true") #一定要注意在python中Ture和False的首字母是大写的
else
print("false")
在python中所有的数据类型都有bool值,包括所有的表达式,各种数据类型。python中获取bool值,是通过一个隐藏的函数bool()函数实现的。
print( 1 == 2) #两者都输出的为False 1式为简单写法 2式才是本质实现
print(bool(1 == 2))
在python中所有的数据类型都有且只有一个零值。零值就是其bool值为False,其他的非零值的bool值都是Ture,还是通过bool(data)来求取该数据类型的bool值。
int_temp = 0 # 整形的零值
float_temp = 0.0 # 浮点的零值
str_temp = "" # 字符串的零值
list_temp = [] # 列表的零值
dict_temp = {} # 字典的零值
1.2.4 字符串(string)
字符串在计算机的使用:1. 文字展示 2.存储数据 3.信息传输。在python中,可以使用单引号或者双引号进行表示。在这里需要说明一个点就是,在python中没有一个真正意义上的多行注释,所谓的多行注释(使用三引号引起来的)本质上是一个多行的字符串,可以赋给一个变量,当赋给变量的时候就是一个字符串(可以多行输出),没有赋值给变量的时候就可以作为一个多行注释。
1.2.4.1 字符串的转义操作
python中的转义符用 / 这个符号来表示。说白了转义符的功能就是:(1) 将某些普通符号给予特殊的功能 (2) 将一些特殊功能的符号普通化。这里只介绍一些常用的转义字符,多了也记不住。
转义符 | 表示的功能 |
---|---|
\n | 表示换行 |
\ | 表示反斜杠(常用于windows平台下的路径表示) |
\t | 表示横向制表符 |
\b | 表示退格 |
\" 或\' | 表示双引号或单引号 |
字符串的格式化输出,我在这里介绍三种方法:
-
类似C语言的传统格式化方法:
在字符串中使用 %s (表示字符串),%d (表示整形),%f(表示浮点型)等数据,需要在字符串中进行占位。具体的实现可以查看下列代码中的例子。
name = "liverpool" age = 23 height = 180.5 print("我的名字是%s,我的年龄是%d,我的身高是%f" % (name, age, height)) #输出:我的名字是liverpool,我的年龄是23,我的身高是180.500000
-
在python 3.6 后才出现,个人最推荐
就是在字符串前面加入f,中间的变量值直接使用{}进行占位
print(f"我的名字是{name},我的年龄是{age},我的身高是{height}") #输出:我的名字是liverpool,我的年龄是23,我的身高是180.5
-
使用format方法进行格式化字符串,个人较为推荐
就是在字符串中的格式化变量使用{}进行占位,在字符串后面使用format方法,按照顺序填入相应的变量。
print("我的名字是{},我的年龄是{},我的身高是{}".format(name, age, height)) #输出:我的名字是liverpool,我的年龄是23,我的身高是180.5
1.2.4.2 字符串序列操作
首先我们需要给字符串归个类(为了更好的理解):字符串属于序列类型。所谓的序列:就是在一块可存放多个值的连续内存空间,按照一定的顺序排列,可以通过每个值所在的位置编号(索引)访问。注意:几乎所有的编程语言,索引编号都是总零开始。python不仅支持正索引,还支持负索引。
name_temp = "liverpool"
print(name_temp[0]) #输出: l 这是第一个字母
print(name_temp[1]) #输出: i 这是第二个字母
print(name_temp[-2]) #输出: 0 这是倒数第二个字母
切片操作,可以取出一段连续的字符串,代码形式:字符串[开始索引位置:结束索引位置],切取的子字符串只包含开始索引位置的字符,不包含结束位置的字符。
print(name_temp[2:6]) #输出: verp 这是第二个字母
print(name_temp[6:]) #输出:ool 结束位置缺省 表示字符串直接取到末尾结束
print(name_temp[:2]) #输出:li 开始位置缺省 表示字符串从0索引位置开始截取
这里还有一个通过切片操作实现的小功能就是,翻转子字符串。
print(name_temp[2:6]) #正序输出: verp
print(name_temp[5:1:-1]) #负序输出: prev
print(name_temp[::-1]) #相当于翻转字符串
本质上是切片操作:字符串[开始索引位置:结束索引位置:step = 1] 默认的步长是1,上述中只是把步长改成了 -1。正数表示从左到右取,负数表示从右到左取。注意一点:当开始索引位置 < 结束索引位置 ,但是步长使用的是负数,那么得到的字符串为空;同理可得,当开始索引位置 > 结束索引位置,步长使用的是正数,得到的字符串为空。如果想隔一个取一个,那么步长选为2,以此类推,这里不做过多的阐述了。
字符串的拼接,使用+
进行拼接,格式:字符串1+字符串2。新拼接的字符串会开辟一个新的内存空间,不会改变原来的字符串内存空间的内容。注意一点:字符串拼接使用的+号,不能和数字混合使用。
name_1 = "liver"
name_2 = "pool"
print(name_1 + name_2) #输出:liverpool
字符串的长度,可以使用解释器的内置函数len()
对字符串的字符个数进行读取。但是这里需要区分字符数和字节数,python使用的是utf-8编码,英文字符占一个字节,中文字符占3个字节。
name_temp = "liverpool"
print(len(name_temp)) #输出的是9
print(len(name_temp.encode("utf8"))) #输出的是9
name_temp_chinese = "利物浦"
print(len(name_temp_chinese)) #输出的是3
print(len(name_temp_chinese.encode("utf8"))) #输出的是9
这里接收一个python一个关键字(in)的特性,广泛用在容器数据类型中,包括在字符串,列表等。这里一个简单的应用。查看子字符串是否在字符串中,在1.2.3中的布尔类型中提到,每一个表达式都有bool类型,所以可以进行判断。
name_temp = "liverpool"
print("liver" in name_temp) #输出: True
print("ler" in name_temp) #输出: False
1.2.4.3 字符串的内置方法
1.2.4.3.1 输入输出函数
input() 是输入函数,代码格式:变量 = input(”提示信息(不强制要求)“),得到的变量一定是字符串,如果输入的是数字并且想进行数字相关的操作,那么需要做数据类型转换。
my_name = input("请输入你的名字:")
my_age = input("请输入你的年龄:")
print(f"my name is {my_age},my age is {my_age}, next year age is {int(my_age) + 1}")
# 请输入你的名字:liverpool
# 请输入你的年龄:23
# my name is 23,my age is 23, next year age is 24
print()函数是输出函数,不同于其他的编程语言,python的print可以输出各种各样的数据类型,包括字符串,整型,浮点型,列表,集合,字典等数据类型,同时可以同时输出不同数据类型的变量
print(100, 180.5, 'liverpool', [1, 2, 3])
#输出: 100 180.5 liverpool [1, 2, 3]
#这是print的源码
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
sep
可以改变连续输出变量的分隔符,end
默认是换行,也可以自己修改,改变其值就可以
1.2.4.3.2 其他字符串内置方法
这里没有列出所有的字符串内置方法,只列出常用的。
方法 | 作用 | 示例 | 输出 |
---|---|---|---|
upper | 全部大写 | “liverpool”.upper() | “LVIERPOOL” |
lower | 全部小写 | “Liverpool”.lower() | “liverpool” |
startswitch(‘字符’) | 是否以该字符开头 | “liverpool”.startswich(l) | True |
endswitch(‘字符’) | 是否以该字符结尾 | ‘liverpool’.endswith(‘pool’) | True |
isdigit() | 是否全部为数据 | ”123“.isdigit() | True |
strip() | 去两边空格或换行符 | ” liverpool “.strip() | “liverpool” |
join() | 将多个字符串拼接起来 | ”-“.join([‘liverpool’,‘利物浦’]) | ”liverpool-利物浦“ |
split() | 暗中某个字符进行分割,默认空格 | ”liverpool-利物浦“.split(“-”) | [“liverpool”,“利物浦”] |
find() | 搜索指定字符串,没有就返回-1,有就返回第一个索引 | “liverpool”.find(“p”) | 5 |
index() | “liverpool”.index(“p”) | 5 | |
count() | 返回指定的字符串的出现的次数 | “liverpool”.count(“o”) | 2 |
replace() | 替换old为new | “liverpool”.replace(“oo”,“yy”) | “liverpyyl” |