之前简单学过Python,但是一段时间后已经不太熟悉,所以跟着廖雪峰老师的教程简单复习一下 Python基础。(因为本人差不多是一个小白,所以非常欢迎各位朋友的指正!谢谢~)
一、Python简介
Python是用来编写应用程序的高级编程语言,适用于:网络应用、日常小工具等。
Python的优点:简单,可以用简单的语言编写复杂等程序;
Python的缺点:运行速度慢(解释型语言),代码无法加密(即发布Python程序,没有C语言编译产生的机器码,所以必须发布源码)
二、Python安装
廖雪峰老师的教程已经详细说明~
三、Python解释器:用以执行.py文件
CPython是使用最广的Python解释器。
四、一个简单的Python程序
命令行模式运行.py文件和在Python交互式环境(<<<)下直接运行代码的区别:
命令行模式运行.py文件如果没有print不会有任何输出;一次性运行所有行的代码。
Python交互式环境:会把每一行Python代码的结果自动打印;写一行执行一行——调试代码
五、Python基础
1、输出print()、输入input()【input返回的数据为str】
2、Python使用缩进组织代码块,应始终坚持使用4个空格的缩进
3、数据类型:整数(大小无限制)、浮点数(运算可能有四舍五入的误差;大小无限制,但超出一定范围为inf)、字符串(转义字符'\';r''表示内部字符默认不转义;'''...'''可表示多行内容,其中...是提示符)、布尔值及其运算、空值None(不能理解为0,0有意义)、列表、字典等
4、变量:动态语言即不指定变量类型,静态语言即指定变量类型。
变量子计算机内存中的表示:eg:a='ABC',Python解释器先在内存中创建了一个‘ABC’的字符串,之后创建了名为a的变量,指向‘ABC’。
5、常量:
6、整数的除法:①:/除法计算结果是浮点数;②://称为地板除,结果为整数
7、字符编码:乱码产生的原因:在多语言混合的文本中各国编码标准产生了冲突。
解决乱码:Unicode字符集,把所有语言统一到一套标准里。
ASCII:一个字节;Unicode:两个字节,ASCII编码实际可看成Unicode的一部分。
UTF-8编码产生的原因:如果文本为全英文,用一个字节编码就可以搞定,但是Unicode字符集通常是两个字节编码,会造成存储空间的浪费以及传输不便,因此可变长编码UTF-8应运而生。
计算机系统通用的字符编码工作方式:统一使用Unicode编码;当需要保存到硬盘(存储空间问题)或者需要传输时,使用UTF-8编码。
8、Python字符串:Python的字符串是以Unicode编码的,支持多种语言。ord和chr实现字符与编码之间的转换;encode可以实现不同编码之间的转换。
Python字符串一个字符对应若干个字节,如果要传输或者保存到磁盘,需要把str变为以字节为单位的bytes:encode();如果要从网络或者磁盘读取字节流,就需要把bytes变为str:decode()。
9.len的使用:计算str的字符数,计算bytes的字节数
10、格式化字符串:%d,%f,%s,%x,format()【用传入的参数依次替代字符串内的占位符{0}、{1}。{1:.1f}保留一位小数】,f-string【以f开头的字符串,变量替换】
如果要输出一个普通字符%,转义使用%%表示%
六、list和tuple
1、list:列表。是一种有序的集合,[]
len:list元素的个数;
class[0]:class是一个列表,访问class列表中索引为0的字符串;
class[len(class)-1]或者class[-1]:访问列表最后一个元素;
class.append():追加元素到列表末尾;
class.insert(x,''):将元素插入到索引为x的位置;
class.pop():删除列表末尾的元素;
class.pop(i):删除列表中索引为i的元素;
class[i]='':把列表中索引为i的元素替换;
列表中包含另一个列表时,可看成二维数组。
2、tuple:元组,有序列表。一旦初始化就不能修改。()
无法按照list使用append、insert方法。
只有1个元素的tuple:t=(1,)与自然数1区分。
tuple不变的意思是:tuple中的每个元素指向不变。
七、条件判断if/if...else/if...elif...else+循环for/while
1、if语句执行的特点:执行某个判断对应的语句后,就会忽略剩下的elif和else语句。
2、循环:break语句可以提前退出循环;continue跳过当前循环
不要滥用break和continue语句,会造成代码逻辑分叉过多,容易出错。
八、dict和set
1、dict:字典,使用键-值存储(key-value)。类比于字典里根据汉字页码找对应汉字。
将数据放入dict的方法:初始化指定、通过key放入。
判断key是否存在:in、d.get(‘’)
删除key:d.pop(key)
dict的key是不可变对象!列表不能做key
2、dict和list的区别:
dict的特点:查找和插入的速度极快,不会随着key的增加而变慢;[只需要知道key就可以查到对应的value]
需要占用大量内存,内存浪费多。
list的特点:查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存少。
————>通过key计算位置的算法为hash算法。
3、set:一组key的集合,但不能存储value。可以看出数学意义上无序并且不重复的元素集合,两个set可以作集合之间的运算。
添加元素:s.add(key)
删除元素:s.remove(key)
4、不可变对象:字符串是不可变对象。操作是对字符串操作,操作的结果以一个新的字符串形式返回,但是原来变量的指向内容依然是原来的字符串。
一、函数:一种代码抽象的方式。
1、调用函数:Python官方函数简介文档
2.定义函数:def+函数名+括号+参数+冒号:
空函数:可以用pass语句,作为占位符。
对参数类型做检查:内置函数isinstance()[作用详见官网]
3.函数参数:
默认参数:必选参数在前,默认参数在后;默认参数必须指向不变对象!
为什么必选参数一定要在默认参数之后?
答:(本人理解)默认参数可以降低我们函数调用的难度,当我们不需要为默认参数提供内容,在函数调用时,就可以直接按顺序选择必选参数即可,从而忽略默认参数,达到大大降低调用函数的参数个数。
eg:
def stu(name,gender,city='Beijing'):
print('name:',name)
print('gender:',gender)
print('city:',city)
#当不需要提供city内容时,可直接调用如下:
stu('Bob','F')#提供的参数内容分别按顺序对应参数,从而减少了参数的个数。
但是如果默认参数在必选参数之前,会造成歧义:
def stu(name,city='Beijing',gender):
print('name:',name)
print('gender:',gender)
print('city:',city)
#不需要修改默认参数
stu('Bob','F')
此时‘F’传给哪个参数呢?是覆盖默认参数还是给必选参数呢?我们知道是传给必选参数,但是计算机无法理解,会造成歧义,所以默认参数要放在必选参数后 。
可变参数
允许传入0个或任意个参数
*numbers接收到的是一个tuple;如果不加*,就需要在调用前组装一个tuple。
关键字参数
关键字参数允许传入0个或任意个含参数名的参数,这些关键词参数自动组装成dict。
**kw会把kw这个dict的所有key-value用关键字参数传入到函数的**kw1参数,kw1获得的是kw的一份拷贝。
命名关键字参数
限制关键字参数的名字。
def person(name,age,*,city,job):
pass
如上例,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
但如果函数定义中有了一个可变参数,就不需要分隔符*。
参数组合
必选+默认+可选+关键字+命名关键字
一个小错误:
当我翻看评论时,发现一位伙伴提了一个问题,大致如下:b=a.append('BJ'),b的结果是none,而不是添加新元素后的a。
当我在百度上查找相关问题时,发现问题出现在append函数返回的是none。也就是说,b这个变量接收的是append函数的返回结果。
我理解的整个过程叙述为:使用append函数在列表a中添加新元素,改变了列表a;同时将append函数的执行结果返回到变量b,也就是b指向为append函数的返回值。
(函数还剩最后一节递归函数,明天学~有点不太专心了哭)