运⾏python程序的两种⽅式交互式和⽂件式_Python基础知识2运⾏Python程序的两种⽅式
⼩⽩学习,如有错误欢迎指点
⼀、每位⼩⽩写的第⼀个Python程序
1.运⾏Python程序的两种⽅式
1.1 交互式模式(即时对话)
打开cmd,打开Python解释器
输⼊ print("hello world")
leftjoin右表数据空回车直接显⽰ hello world
(交互式能够及时得到代码执⾏结果,调试程序⼗分⽅便,但⽆法保存代码)
1.2 脚本⽂件的⽅式(约定此类⽂件后缀为.py,虽然没有后缀也没事)
打开⼀个⽂本编辑器,写⼊ print("hello world") 这段代码并保存⾄D:\test.py
打开cmd,直接输⼊ python D:\test.py #python+⽂件路径
回车显⽰ hello world (即运⾏结果)
(代码可以永久保存,以后开发程序主要都是将代码写⼊⽂件即使⽤脚本的⽅式,偶尔打开交互式模式调试其中某⼀段代码验证结果)
2.运⾏Python程序的三步骤启动python解释器
解释器发送系统调⽤,将已写好的代码⽂件内容读⼊⾄内存(此时⽂件内的字符没有任何语法意义,只是⼀些普通字符)
解释器读取刚刚读⼊内存的内容,并识别python语法并执⾏
对⽐⽂本编辑器读取代码⽂件的步骤启动⽂本编辑器
⽂本编辑器发送系统调⽤,将已写好的代码⽂件内容读⼊⾄内存
⽂本编辑器读取刚刚读⼊内存的内容,将内容输出到屏幕上,让⽤户看到结果
总结:其实python解释器也是⼀种程序,所以两者的前两个步骤完全相同,只有在第三步对读取的代
码的处理⽅式不同即仅仅每个程序最后所实现的功能不同⽽已。
⼆、IDE⼯具(集成开发环境)——pycharm
IDE的意义:IDE(Integrated Development Environment)顾名思义,就是集合了开发所需的⼀切⼯具构成⼀个整体的开发环境(如代码提⽰,代码补全,代码纠错,及时保存⽂件等等功能),拥有IDE⼯具后能够极⼤提升程序员的开发效率,⽬前开发python程序最好的IDE就是pycharm
pycharm安装:⼀般使⽤专业版,所含功能更多
虚拟环境:
虚拟环境就相当于初始真实环境的复制体,每开发⼀个新项⽬,我们都应该建⽴⼀个虚拟环境,以供下载安装第三⽅的库,当项⽬结束之后就可以将虚拟环境删掉,重新建⽴新的环境,避免对下⼀个开发项⽬造成污染影响。
三、python语法(语法就是规则、原则)
每⼀个语法其实都是在模仿取代⼈类的某项能⼒,所以学习语法的⽅法:
三步⾛:是什么,为什么,怎么⽤(what、why、how)
1.注释
what:
注释就是对代码的解释说明,注释部分不会被当做代码执⾏
why:
增强代码的可读性(模仿⼈的解释说明的能⼒),可以注释掉不想运⾏的代码
how:
注释分为单⾏注释和多⾏注释
单⾏注释⽤#,可写在代码正上⽅或者正后⽅
多⾏注释⽤三对双引号或单引号,分别放在代码正上⽅和正下⽅(多⾏注释⼀般只在代码开头写⼀次)
# 注释不要⽤拼⾳,只标记关键代码,不⽤全⽂注释
2.变量(标识符的⼀种)
what:
变量是指变化的量,量即事物的状态(如游戏⾓⾊的等级,性别,⾦钱)
why:
程序运⾏的本质是⼀系列状态的变化,需要⼀种机制能够保存记录事物的状态,⽽事物的状态是不断发⽣变化的(模仿⼈的记忆事物的能⼒),变量其实就是存取内存的机制
how:先定义,后引⽤(先存后取)
定义变量:
变量名=变量值(解释器执⾏变量定义时,会申请内存空间存放变量值,存放地址绑定给变量名,这样就可以通过变量名获取相应变量值)
# 可以同时为多个变量赋值 如: a,b = 1,2
命名规范:见名知意
变量名只能是字母(包括中⽂等语⾔字符)、数字、下划线的组合(尽量不要使⽤中⽂)
第⼀个字符不能是数字
关键字不能被定义成变量名,但可以被包含(如and、as、def、if、for、while、is、not、else、or等等)
python中变量名⼀般使⽤纯⼩写下划线风格,⼀般空格可以⽤“_”下划线替代(如age_of_lili=56)
#驼峰体是变量名的每个单词⾸字母⼤写
补充:del 变量名 表⽰解除变量名与变量值的绑定关系 (垃圾回收引⽤计数减少)
变量的三⼤特性id:变量的内存地址,每个变量都有唯⼀编号 # 查看id的⽅式 print(id(变量名))
type:变量值的类型(如str,int,float等) # 查看type的⽅式 print(type(变量名))
value:变量值 # 查看值的⽅式 print(变量名)
#两个等号“==”⽐较的仅仅是value值,“is”⽐较的是id(出于对性能的优化,所以不同的变量,当变量值相同时,id也可能相同,如变量值是在⼩整数池内的变量,这是⼀种内存优化机制)
常量(python中没有常量的说法或规范)
matlab怎么用excel数据画图与变量相对即程序运⾏时,固定不变的值(量),在python中⽤法和变量⼀样,只是常量⼀般约定变量名全部⽤⼤写表⽰(如
PI=3.1415926),但本质上变量值还是可以修改的
# 与python不同,C语⾔中有专门的语法定义常量且⼀旦定义为常量,再变更就会报错
3.基本数据类型
有了变量后,我们就可以记录事物的状态,但事物的状态有不同种类(年龄,性别,⾝⾼,名字等),所以变量值也有不同的类型
type(变量名):可查询对应变量值的数据类型
3.1 数字类型:int整型:⽤于标识年龄,等级,QQ号,⾝份证号码等等整数类的变量,如:age=10,age=int("10"),int可以把纯数字的其他类型数据转化为整型
float浮点型:⽤于标识⾝⾼,体重等存在⼩数的变量,如 salary=float(3.2)
complex复数型:如x=1+2j
3.2 str字符串类型:
⽤于记录姓名,国籍,住址等描述性变量,⽤单引号,双引号,多引号都可以定义字符串,但是要考虑引号嵌套配对问题。如:
name=“lili”,多引号可以写多⾏字符串
# 字符串中想加引号,应该外层双引号,内层单引号使⽤
如:print(“ name is 'lili' ”)或者 print(' name is \'lili\' ')
(其中“\”有转义的意思,表⽰后边的引号不再有特殊意义,就是普通字符⽽已,\不能⽤在{}内)(使⽤r 也可以让反斜杠不发⽣转义,r是raw原始的意思)
#字符串之间可以互相相加,相乘运算(都只是字符串拼接)
# 切⽚提取字符串相应数据 [头索引:尾索引:步长](字符串索引只能取值不能更改值)
str[1:3]获取字符串中索引1~2的字符,不包含3;#str是变量名,顾头不顾尾
str[:]获取字符串中索引0~最后的所有字符;
str[-3:-1]提取字符串中索引(-3)~(-1)的字符,不包含(-1);
str[-1:-3]提取字符串为空字符串,但系统不提⽰错误;
str[::2]获取字符串中索引0~最后的所有字符,但步长为2即每两个字符获取⼀次,如“string”最终获取的是“srn”;如果步长为负数,就是逆向取值
# 切分 变量名.split("分隔符") 这⾥的分隔符可以是字符串内的任意字符,切分后是list数据类型(不指定分隔符就默认为空格)
# 移除两边空⽩(空格) : 变量名.strip()(括号内不填写默认移除空格、\n、\t,填写其他的就移除指定字符,注意只能移除字符串两边的,中间的不⾏)
3.3 list列表:⽤于记录多个相同属性的变量值(也可以是不同属性的),⽅便取⽤,在[]内⽤逗号分隔表⽰。
如 stu_names=['lili','kitty','ming']
列表类型是⽤索引来对应值,从0开始计数,# -1表⽰列表的最后⼀个变量值
如 stu_names[1],执⾏过后显⽰ 'kitty'
# 增加元素 变量名.append(元素)插在末尾 或者 变量名.insert(索引号,元素)插在索引号对应元素的前⾯(不能通过直接增加索引和值来增加元素)
删除元素 del 变量名[索引]
切⽚与字符串类似(顾头不顾尾)
列表的长度是指元素的总个数
列表嵌套:形如 info=[[xx,xx],[x,x]]等等。使⽤list的原因在于取⽤信息是按根据位置顺序来取的
3.4 dict字典:记录多个不同属性的变量值,可以明确表⽰值的含义,在{}中⽤逗号分隔表⽰
如 person_info={'name':'lili','age':18,'height':171.4}
字典类型是⽤key(键)来对应值,key通常都为字符串,如 person_info['age'],执⾏后显⽰ 18
增加元素 直接增加key和值即可 : 变量名[key]=值
删除元素 del 变量名[key]
字典嵌套:形如 info=[{xx:xx,xx:xx},{x:x,x:x}]等,使⽤字典的原因在于取⽤信息是根据具体key即关键词来取的
#注意 成员运算判断字典时默认都是判断key,⽽不是key后⾯的元素
3.5 bool布尔类型:⽤于记录真假两种状态,即True和False
所有数据类型都⾃带布尔值:None,0,空(空字符串,空列表,空字典等)三种情况布尔值为False(0),其余均为True(1)
布尔值也可以和数字运算
3.6 tuple元组
元组内元素不能修改,写在()内,元素间⽤逗号隔开,其余和列表类似
3.7 set集合
oracle数据库备份脚本4. 可变数据类型和不可变数据类型
可变数据类型:变量值改变后,id未变(如字典,列表,集合)
不可变数据类型:变量值改变后,id也改变(如数字类型,字符串,元组)
5. 输⼊输出(⽤户交互)
输⼊:
username=input("请输⼊你的账号:")
#python3中input功能⽤户输⼊的内容均存为字符串赋值给变量名,相当于python2中的raw_input 功能,⽽python2中的input功能则是⽤输⼊什么数据类型,就存为什么类型(python2的机制对⽤户不友好,需要⽤户了解数据类型的区别,所以python3中做了改进)
输出:即print()
格式化输出⽅式:
①%号
msg="my name is %s ,my age is %d" % (“lili”,21)
print(msg) #这样就成为⼀个模板,格式化输出
# %s通⽤,%d只能代替数字类型 (%s、%d 叫做占位符)
%()s 可⽤于字典
delphi7官方②str.format(推荐)
print ("my name is {},my age is {}".format("lili",21)) #按正常顺序
print ("my name is {0},my age is {1}".format("lili",21)) #使⽤索引
print ("my name is {name},my age is {age}".format(name="lili",age=21)) #使⽤字典
print ("my name is {name},my age is {age}".format(**变量名)) #使⽤**来解包
print("{0:*<10}".format(变量名)) # 左对齐共10个字符,变量名内容左对齐,剩余的⽤*填充
print("{0:*^10}".format(变量名)) #居中共10个字符,变量名内容在中间,剩余的⽤*填充
print("{salary:.3f}".format(salary=1232132.12351))# 精确到⼩数点后三位,四舍五⼊
print("{0:b}".format(123))# 将变量转换成⼆进制(binary)
python在线编辑器python3
③f-Strings(f或F) # python3.5后能⽤
name="lili"
age=21
print (f"my name is {name},my age is {age}") #{}中可以是变量名,表达式等等
补充: 换⾏符:\n 这是print默认功能的参数 print=(“abc”,end=“\n”)
(⼀般换⾏需两步:先⾄⾏⾸,再换⾏ \r\n,python中简化了)
四、垃圾回收(GC)机制(回收⽆效变量值所占内存)
原因:在定义变量过程中解释器会申请开辟内存空间存放变量的值,⽽内存容量是有限的,同时有些变量值在程序运⾏过程中会逐渐变为⽆效变量即垃圾,⽽这些垃圾还是会占着有限的内存空间最终导致内存溢出,系统崩溃,所以我们需要⼀种机制管理内存来对其回收清理,释放出内存。 # Cpython⾃带了⾃动的垃圾回收机制来解决这个问题(懂得其中原理即可)
堆区和栈区
变量名与值的内存地址的关联关系存于栈区
变量值存于堆区(回收内存就是回收的堆区的内容)
直接引⽤和间接引⽤
直接引⽤指从栈区直接引到内存地址
间接引⽤指从栈区到堆区后通过进⼀步的引⽤到达最终的内存地址
垃圾回收机制⼤致过程:先通过“引⽤计数”跟踪并回收垃圾,再通过“标记-清除”解决循环引⽤所产⽣的⽆法回收垃圾,同时通过“分代回收”以提⾼垃圾回收效率
引⽤计数:变量值被变量名关联的次数(引⽤计数的增加减少都各有两种⽅式——直接和间接),⼀旦循环计数为0,那么其占⽤的内存就会被回收
引⽤计数出现的两个问题:
1.循环引⽤
循环引⽤(交叉引⽤)即存在相互引⽤,⼀旦两个变量都与变量值解除绑定后,变量值的引⽤计数不会变
为0 ,其内存也就⽆法被回收(类似于内存泄漏)
解决⽅案:标记清除
当可⽤内存被耗尽时,就会停⽌程序运⾏,进⾏先标记(标记所有可以被访问到的变量值,剩余的就是⽆效垃圾)再清除(将没有标记的都回收)
2.效率问题
引⽤计数的回收机制每次都将所有对象遍历⼀遍会⾮常耗时间
打开任务进程快捷键解决⽅案:分代回收(以空间换时间)
经过多次遍历后根据变量值的存活时间将其分等级(分代),权重越⾼,GC扫描的频率就越低,这样每次扫描的变量的总个数就减少了,从⽽提⾼回收效率(空间换时间的原因:分代回收可能导致部分垃圾⽆法及时回收,但是总体会提⾼效率)
五、基本运算符
1.算数运算符
+、-、*、/、//(取整)、**(乘⽅、幂)、%(取余数,取模)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论