跟着廖雪峰老师学python(一)

之前简单学过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函数的返回值。

(函数还剩最后一节递归函数,明天学~有点不太专心了哭)

你可能感兴趣的:(python学习,python)