《对廖雪峰老师的Python教程的学习小结一》

        由于学习、工作等原因,差不多一年过后,自己重新开启了博客的书写之路。这里整理和记录了自己的每天点滴学习、思考等相关内容。自己最近重新看了廖雪峰老师的Python教程(网址为:https://www.liaoxuefeng.com/wiki/1016959663602400),系统地回顾了Python语言的相关内容,并将以小结的内容形式进行展示。首先,将下面的几部分内容作为学习小结一的内容。内容中涉及的程序均来源于廖老师的Python教程(网址为https://www.liaoxuefeng.com/wiki/1016959663602400/)。

一、Python简介

Python:运行速度慢;

              不能加密代码;

              命令行环境和交互环境;

              Cpython和IPython的解释器;

              exit()退出交互环境,用python xxx.py在命令行模式下执行python程序;

              python代码运行助手:在线编辑代码执行出结果;

              边编译边执行。

文本编辑器:Sublime和Notepad++。

二、Python程序

1. 输入和输出

输入:input()  获得的结果是str类型的,可以用类似的int()等来强制转换为对应的类型。

输出:print()。

缩进应严格遵守“4个空格”的限制。可以在文本编辑器中进行设置,保证Tab被设置为“4个空格”。

2. 数据类型

整型;

浮点型(1.23*10^9用1.23e9表示,0.000012用1.2e-5表示),整型和浮点型都没有大小限制;

字符串:用’ ’或” ”都可以,用\x实现字符x的转义,用’’’...’’’表示多行内容;

布尔型:True和False,支持and、or和not运算;

空值:用None表示(None不是0)。

3. 变量和常量

变量:字母、数字和_的结合,但是不能以数字开头。

常量:用大写的变量名表示。

静态语言:在定义变量时必须指明变量的类型;动态语言:在定义时没有指定类型。

除法:/的结果是浮点数,对/左右两侧的数据是整数还是浮点数无关,//的结果是整数(如14//3的结果是4,4//3的结果是1)。

求余:%结果是整数,和C中的用法是一样的。

4. 字符串编码

ASCII只能表示127个字符,用一个字节表示。

Unicode用两个字节表示。

从节省存储空间的角度出发,引入UTF-8,是“可变长编码”,用1~6个字节表示。

在计算机内存中都是以Unicode编码的形式进行存储的,在保存到硬盘或者需要传输时 以UTF-8的形式进行传输。

浏览网页时服务器是将Unicode内容转变为UTF-8再传输到浏览器的。

在Python3中,字符串是以Unicode的形式进行编码的。对于单个的字符,Python提供了ord()获取字符的整数表示,chr()把编码转变为字符。

把Unicode表示的字符转变为以字节为单位的bytes:encode()方法。反之,用decode()。

len(x):统计字符串x中有的字符的个数。

python的源代码包括中文时,要将其转变为UTF-8编码。使得Python解释器在读取代码时是按照UTF-8编码读取的。为此,我们通常在文件开头写上:

#!/usr/bin/env python3#

-*- coding: utf-8 -*-

第一行:告诉Linux/Mac OS X系统,这是一个Python可执行程序,Windows系统会忽视这个注释。

第二行:告诉Python解释器,应该按照UFT-8编码的形式读取源代码。申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码

5. 格式化

(1)%实现格式化

例如:print('%2d-%02d' % (3, 1))  结果是:

 3-01

print('%d-%02d' % (3, 1))  结果是:

3-01

(2)另一种格式化的方式是使用format()方法,但是比较麻烦

6. list和tuple

(1)list

>>> classmates = ['Michael', 'Bob', 'Tracy']

>>> classmates

['Michael', 'Bob', 'Tracy']

访问元素:从0开始,如classmates[0]。

用classmates[-1]可以直接获得最后一个元素,类似的用classmates[-2]获得倒数第二个元素。

追加元素到末尾:classmates.append(‘Adam’)。

把元素插入到指定的位置上:classmates.insert(1, ‘Jack’),即将’Jack’插入到下标为1的位置上。

删除末尾的元素:classmates.pop()。

删除指定位置的元素:classmates.pop(1),即删除下标为1的元素。

把某个位置的元素替换为其它的元素:如classmates[1]=’Search’。

list中也可以包括其它的list,如:

>>> s = ['python', 'java', ['asp', 'php'], 'scheme']

>>> len(s)

4

按照s[2][1]可以得到’asp’。

list中也可以没有元素:s=[],则len(s)的结果是0。

(2)tuple

相比list,元素是不能被修改的。从而,确保了数值的安全。

定义如下所示:

>>> classmates = ('Michael', 'Bob', 'Tracy')

和list一样,按照classmates[-1],classmates[0]获取元素。

定义空tuple:s=()。

定义只有一个元素的tuple,如s=(1,),即()中元素的后面应该有,。tuple里面是可以有元素是list的,这并不违背不变的原则,获取其中的元素的方式和list是一致的。

7. 条件判断

if 判断1:

语句1

elif 判断2:

语句2

...

else

语句n

8. 循环 (注意例子中的蓝色语句)

(1)for循环

sum = 0

for x in range(101):

    sum = sum + x

print(sum)

结果是:5050。

(2)while循环

sum = 0

n = 99

while n > 0:

    sum = sum + n

n = n - 2

print(sum)

break和continue:break提前结束循环,continue提前结束本次循环。

不要滥用break和continue!

9. dict和set

(1)dict

dict:键-值对。

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}

>>> d['Michael']

95

采用dict可以确保查询速度。和list、tuple对比,查询速度并不会随着长度的增加而变慢。但是,需要占用较大的内容。因而,相比之前的数据结构,实际上用空间来换取时间!

增加元素和重新赋值:

>>> d['Jack'] = 90

>>> d['Jack']

90

>>> d['Jack'] = 88

>>> d['Jack']

88

删除字典中的元素:d.pop(Bob)。

查询key是否存在,不存在的话返回自己指定的数值:d.get(Thomas, -1),不存在的话将返回默认值-1;如果不写-1的话,即d.get(Thomas),则不存在的话会范围None。

dict中的key不是可变对象,因而常用str作为key。

(2)set

定义set时,需要提供一个list作为输入。set中是没有重复元素的。

>>> s = set([1, 2, 3])

>>> s

{1, 2, 3}

增加元素:a=s.add(4)

移除元素:a=s.remove(4)

集合的交集:s1 & s2

集合的并集:s1 | s2

和dict一样,元素不能是可变对象。

三、函数

1. Python有很多内置函数:如abs(),max()(max的参数可以是很多个,从中找出最大的那个数值),int(),float(),str(),bool()。

函数其实就是抽象的具体表现形式!

2. 函数的定义

(1)空函数

def nop():

    pass

pass还可以用在if判断等情况下,它什么也不做,只是起一个占位符的作用。如果没有pass的话,则会出错。

(2)函数返回多个值

import math

def move(x, y, step, angle=0):

    nx = x + step * math.cos(angle)

    ny = y - step * math.sin(angle)

    return nx, ny

调用函数:

>>> x, y = move(100, 100, 60, math.pi / 6)

>>> print(x, y)

151.96152422706632 70.0

>>> r = move(100, 100, 60, math.pi / 6)

>>> print(r)

(151.96152422706632, 70.0)

注:函数体中用return返回结果。如果没有return的话,则会返回None(如上所示,print(r)的结果是None)。

函数可以同时返回多个结果,结果以tuple的形式输出。

3. 函数的参数

(1)默认参数

如2中所示的angle=0。

将选择的参数放在前面,将默认参数放在最后!使用默认参数后,可以使得函数可以适用于复杂的调用和简单的调用。

既可以按照默认顺序提供参数,又可以不按顺序提供,此时需要将参数名写上。如:enroll('Adam', 'M', city='Tianjin')

默认参数必须是指向不变对象。否则,容易出错。

(2)可变参数

例如:

def calc(*numbers):

    sum = 0

    for n in numbers:

        sum = sum + n * n

    return sum

可以传入0个参数,即cal(),结果是0。参数numbers接收的是一个Tuple。若传入的是list,则可以:

>>> nums = [1, 2, 3]

>>> calc(*nums)

14

(3)关键字参数

允许传入0个或任意多个含有参数名的参数。将会自动组装成一个dict。例如:

def person(name, age, **kw):

    print('name:', name, 'age:', age, 'other:', kw)

>>> person('Adam', 45, gender='M', job='Engineer')

name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

使用关键字参数可以扩展函数的功能。

>>> extra = {'city': 'Beijing', 'job': 'Engineer'}

>>> person('Jack', 24, **extra)

name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

在函数内部对于kw的修改不会影响extra。

(4)命名关键字参数

若要限制关键字参数的参数名字,则需要使用命名关键字参数。

def person(name, age, *, city, job):

    print(name, age, city, job)

*后面表示参数的名称。一定要有*,否则会认为所有的参数都是必要参数。如果,参数列表中已经有可变参数了,就不用写*。如下所示:

def person(name, age, *args, city, job):

    print(name, age, args, city, job)

(5)在参数列表中的参数的位置顺序

必要参数,默认参数,可变长参数,命名关键字参数,关键字参数

(6)总结

默认参数应该是指向不变的对象。

*args参数实际上是一个tuple。

**kw参数实际上是一个dict。

命名关键字参数不要忘记写*。

4. 递归函数

优点:易懂。

缺点:递归过深会导致栈溢出。

改进:采用尾递归(对于不支持循环的编程语言是一种好的选择。对于Python而言,由于解释器没有对尾递归进行优化,因而仍会导致栈溢出)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值