python学习笔记

一、pycharm基础

1.1 pycharm中文件重命名

在修改工程中的py文件时,要点重构文件,而不是在文件目录中直接修改文件名,因为如果这个文件被工程中其他文件import时,直接修改文件名后,被import的地方会出错(这里不会自动更新)!

在这里插入图片描述

1.2 pycharm中自动规范代码

对于代码书写不规范的地方(缺少空格)使用ctrl+alt+l可以一键修改,例如下面对a进行赋值,赋值号左右两侧都没有空格,这时可以使用快捷键自动规范格式
在这里插入图片描述

1.3 python文件的编译解释过程

下图为python文件的执行过程
在这里插入图片描述
通过该图可以总结以下几点:

  1. 严格来说python先将源文件编译成字节码pyc文件,然后再解释pyc文件
  2. Pyc文件主要作用是持久化编译结果,加快执行效率(会不会生成,一般看有无import,会生成import后的py文件pyc文件)
  3. 可以手动生成pyc文件:python -m py_compile [py文件名]
  4. py和pyc文件都可以通过python命令直接执行,pyc会相对保密一些(但是有反编译机制)

1.4 python代码开头加的一行神秘注释

1.4.1 #!/usr/bin/env python

通常情况下python文件开头都会加上这么一段注释:

#!/usr/bin/env python

这是专门为linux系统设计的,我们在linux系统中常常用**./**来执行命令:

./[xx.py]

但是linux系统并不知道用什么编译器来执行该文件,在我们python文件开头加上#!/usr/bin/env python便告诉了编译器用python解释器来编译解释。注意:在执行前需要给.py文件加上使用权限:chmod a+x [xx.py]

1.4.2 # encoding=utf-8

由于在python2版本的解释器用的编码格式时ASCLL码,并不支持中文,一旦发现程序中有中文,就会报错,所以在开头加上一段# encoding=utf-8注释,即可解决python2版本的中文报错问题(python3版本不存在,因为它使用的就是utf-8编码格式),但是现在很少代码开头有这么一段,因为没多少用户使用python2版本的解释器了

二、python基本语法

2.1 python中变量的数据类型

2.1.1 python中的变量

python中的变量属于动态类型的变量,即变量不会在编译期间就确定下来数据类型,所以在程序中可以出现如下情况:

a = 5
a = "你好"

变量a先被赋值5这个int类型,然后又被赋值为"你好"这个string类型,一个精通C++的人看了直呼“你这个样子真是让我匪夷所思啊”,这是在C/C++中绝对不会出现的情况,所以C/C++的变量大多数是静态变量,但是C++提供了auto关键字可以定义动态类型变量

2.1.2 常见的数据类型

1. Numbers(数值类型)
整数(int),四种进制表示形式:

进制前缀
二进制0b
八进制0o
十进制无前缀
十六进制0x

浮点数(float),例如(123.2)两种表现形式:

小数表示科学计数法
123.21.232e2

复数,有两种写法:

一般形式构造函数形式
1 + 2jcomplex(1, 2)

2. Bool(布尔类型)

bool类型其实是int类型的子类,ture默认为1,false默认为0,可以和int类型加减。
3. String(字符串)
三种符号的字符串
可以用" “(双引号),’ '(单引号),”“” “”"(三引号)来表示字符串,其中三引号可以不加任何特殊字符进行多行书写,例如:
在这里插入图片描述

续行符
其中转义字符和c相同,不过多说明,有一个很有意思的续行符"",这里和c中的宏定义那里类似,使用“\”续行,注意这个符号后面不能有空格!否则会报错:

Str = "你好"\
    "hh"
print(Str)

输出结果是:你好hh
当然你也可以在字符串中间输入回车,编辑器会自动给你完成续行符的添加并换行
原始字符串
c中字符串中不能有%,“或者其他的字符,所以才有了转义字符,需要前面加一个\,但是当字符串中这样的信息一多,加\的操作又麻烦又不好看,所以python中有了一种叫原始字符串的东西,字符串前面加r即可将字符串中所有字符原封不动打印出来,例如:

Str = r"已完成90%"
print(Str)

输出结果是:已完成90%
对字符串的一些常用操作

  • 字符串的拼接:
    python中重载了加号,所以可以直接字符串的相加,例如Str = "你好" + "我好"

  • 字符串的乘法
    例如想在Str中存100个a,则可以写为Str = "a"*100

  • 字符串切片
    这里同c一样,字符串有指针的作用,可以通过下标访问对应元素,但是有一点不同,python的下标可以为负,例如下标-1表示字符串最后一个元素的位置,所以python中字符串下标的范围是:[-max, max - 1] 其中max是字符串的最大长度
    python中还可以提取字符串中一段字符,普通格式是Str[star:end:step] , star默认是0,end默认是len(Str), step默认是1,切片的区间为[star , end ),是一个左闭右开区间,当三个参数全为默认时,例如:

Str = "1234567"
print(Str[::])

表示输出整个字符串,这三个参数还可以为负值,前两个为负值时表示从最后一个元素忘前数第几个,step为负时表示从后往前遍历。如果想要反转一个字符串,可以写为:

Str = "1234567"
print(Str[::-1])

4. List(列表)

列表和字符串的区别中有一点:字符串定义好后就不可以修改元素,但是列表可以
列表和C++的vector比较相似,但是一个列表可以盛放不同的数据类型,而一个vector只能存放单一数据类型
列表定义形式一a = [123 , "你好", [1, 2] ]
列表定义形式二:for循环来填充列表,类似c语言了

a = []
for i in range(1, 10):
    a.append(i)
print(a)

输出结果为:[1, 2, 3, 4, 5, 6, 7, 8, 9]
列表定义形式三:列表推导式
用列表推导式模仿上面填充元素:

a = [i for i in range(1, 10)]
print(a)

结果为:[1, 2, 3, 4, 5, 6, 7, 8, 9]
这个推导式可分为两部分,后半部分for循环是遍历的范围,前面部分是对元素进行的操作,还可以在后面加上第三部分if语句,例如:

a = [i for i in range(1, 10) if i == 1]
print(a)

输出结果是:[1]
5. Set(集合)
6. Tuple(元组)
7. Dictory(字典)
8. NoneType(空类型)

2.1.3 变量赋值

方式一:(两个不同变量)
可以写成例如:a , b = 1 , 2
方式二:(两个相同变量)
可以写成例如:a = b = 2

2.1.4 使用 type( ) 查看变量数据类型

由于Python不像c/c++会在定义变量的时候就声明了变量的数据类型,所以有些时候不知道某个变量具体是什么类型,可以通过type(变量)来获取变量的数据类型

2.1.5 数据类型间转化

由于python的运算符不支持两个不同数据类型的变量运算,所以需要通过强制转化,例如Numbers(数值类型)数据和字符串类型数据进行加法,程序会报错,需要int(num) + str 来强制转换。但是并不是任何数据类型间都可以相互转换,有的会报错
数据类型转换图:
在这里插入图片描述

2.2 运算符(精简版)

2.2.1 加法

注意在python中已经对+进行了重载,但只能是两个相同数据类型的变量进行相加,例如:
print(1 + 2),就是两个数字类型的变量相加
print(“1” + “2”),就是两个string类型的变量相加

2.2.2 幂乘 **

例如求3的5次方,可以写成print(3 ** 5)

2.2.3 除法运算 /

python的中除法不同于c中的除法。
c中的除法有两种情况:
情况一:两个数都是整数,结果若整除不尽则取整数部分
例如: printf("%d", 5 / 3) 结果是1
情况二:两个数中至少有一个是float类型,结果若除不尽则为小数
例如:printf("%d", 6.3 / 3) 结果是2.1
pthon中的除法 /
例如:print(15 / 2) 结果是7.5,所以python中的除法是真正的意义上的除法
注意:不可以除0,会报错(数学上也自然可以理解)

2.2.4 整除运算 //

整出运算实际上是只取结果的整数部分
例如:
print(5 // 2)结果就是2,即使你使用print(5.0 // 2),结果也还是2.0
所以//是取结果的整数部分

2.2.5 取余运算符 %

例如:print(5 % 2),结果就是1,%是求结果的余数

2.2.6 整除运算符和取余运算符应用场景

在这里插入图片描述
用于求某个标签的row数和col数

2.2.7 is比较运算符

这是比较两个变量的唯一标识是否一直(在c中是地址是否一样),通常可以用id()函数查看某个变量的唯一标识。
小贴士:
python会将相同值的Number类型变量分配同一块儿内存空间,这里有点像两个指向同一块儿内存空间的指针,通过id()可以发现两个相同值得Number变量唯一标识相同
返回值:bool

2.2.8 链式运算符 10 < a < 40(仅在python中有!挺好用)

判断一个数是否在某个区间内,python可以写成:
10 < a < 40 ,判断a是否在(10,40)这个定义域内(这是在其他语言所不允许的)
返回值:bool

2.2.9 逻辑运算符 and or not

在python中与或非分别是:and or not,用法和c中的 && || ! 类似,但有些不同点,与和或运算在C中的表达式结果只有ture或者false,而python中并不只有ture或者false:
与特性:一假即假,返回最后一个用作判断的值:
例如:print(1 and flase) 结果是false
例如:print(1 and 0) 结果是0
或特性:一真即真,返回最后一个作判断的值:
例如:print(0 or 10) 结果是10
例如:print(flase or ture) 结果是ture

2.3 python的输入输出

下面是python文件可以订阅的信息和发布的信息
在这里插入图片描述

2.3.1 输入input

input构造函数括号内的string类型数据打印在中断,提示用户输入,结束输入后返回一个string类型的数据赋值给另外的变量,例如:

value = input("请输入一个数值:")
print(value)

输出结果是:
在这里插入图片描述

2.3.2 输出 print

2.3.2.1 print的相关参数

在这里插入图片描述
第一个参数value,可以输出多个信息,中间以逗号隔开

print(123, "hhh")

输出结果为:
在这里插入图片描述
注意:这里和c不同,在c中有printf函数,在printf中逗号后面内容为前面占位符的填充值,而在python里逗号用来分割不同的打印信息
在没有设置sep参数的情况下,默认以sep=" ",每个value之间以空格隔开
第二个参数sep,用来设置不同value之间的分隔符样式,例如:

print(123, 456, sep="=")

输出结果为:
在这里插入图片描述
第三个参数为end:用来设置结束符类型,默认是"\n"即自动换行,如果想打印完这行不自动换行,即可:

print("hh", end="")

输出结果为:
在这里插入图片描述
第四个参数是file:如果想打印信息输出到文件中,可以利用file指定想要写入的文件,例如:

f = open("text.txt", "w")
print("sda", file=f)

open构造函数第一个参数是文件名(路径),第二个参数是读写的权限,w表示写

2.3.2.2 print的格式化输出

情况一:类似于c语言用%d,%f等作为占位符

print("我的名字是%s,我的分数是%d" % ("嘿嘿", 10))

输出结果:我的名字是嘿嘿,我的分数是10
情况二:利用字符串的format(格式化)方法,利用{0}等作为占位符

print("我的名字是{0},我的分数是{1}".format("嘿嘿", 10))

输出结果:我的名字是嘿嘿,我的分数是10

2.3.2.3 类似%d的占位符格式

在2.3.2.1的情况一种使用了一次%占位符,其一般形式为:%[(name)] [flag] [width] [.precision] typecode
其中[]表示参数都是非必要参数,例如%d中只包含了%typecode
(name)参数:当%后面是字典数据类型(类似于枚举)时,需要加上该参数。根据对应的括号里的key查找对应的值,例如:

print("%(1)d,%(2)d" % ({"1": 1, "2": 2}))

输出结果为:
在这里插入图片描述
width参数:用于规定输出Numbers变量的长度,如果是小数,则会算上小数部分,若规定长度大于实际长度则默认左侧补空格(想补0可以用flag参数设置),也可以用flag参数规定右侧补(下面会说),例如:

print("%3d" % 2)

输出结果是(左侧自动补2个空格):
在这里插入图片描述
flag参数:也是只针对Numbers数据类型,有三个flag,空格、-与0,flag默认是输出右对齐
空格(为输出的数值左侧自动填充一个空格,这是为了正数于负数的对其):

print("% d" % 2)

结果为:
在这里插入图片描述
负号代表输出格式左对齐:
例如:

print("%-3d" % 2)

输出结果为:
在这里插入图片描述
代表位数不足补0
例如:

print("%03d" % 2)

结果为:
在这里插入图片描述

2.4 python的程序执行顺序语句

2.4.1 选择语句(只有if,else,无switch,case)

if语句和c的写法相似,以缩进代替了大括号,且不用写判断逻辑的括号,后再加个冒号即可。例如(if,elif,else):

if 1 > 2:
    print("你好")
elif 1 > 1:
    print("我好")
else:
    print("结束")

输出结果是“结束”

2.4.2 循环语句

2.4.2.1 while循环

python中while中多了一个else,表示当while后面表达式为flase时执行else的结果,在python中,循环的地方通常用while,而for则更多用于遍历一个集合里的元素

i = 0
while i < 10:
    print("哈哈")
    i += 1
else:
    print(i)

输出结果:
哈哈
哈哈
哈哈
哈哈
哈哈
哈哈
哈哈
哈哈
哈哈
哈哈
10
注意:当while循环体中有break语句时,直接跳出循环,不执行else中的内容,并且python没有do…while语句

2.4.2.2 for循环

for通常用于遍历字符串或列表,同样也可以和else搭配使用,例如:

Str = "我是被遍历对象"
for i in Str:
    if i == "象":
        print(i)
    print(i, end="")
else:
    print("遍历完成")

输出结果:
在这里插入图片描述
当for用于循环时,常和range函数搭配,例如:

num = 1
for i in range(1, 10):
    print(num)
    num += 1

输出结果为:

在这里插入图片描述
这样就相当于C语言中的for循环了,for(i = 1,i < 10, i++)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值