《零基础入门学习Python》学习笔记(1-25)

参考:《零基础入门学习python》http://edu.csdn.net/course/detail/906?locationNum=1&fps=1&ref=srch&loc=2

论坛:http://bbs.fishc.com/forum-243-1.html

1、我和python的第一次亲密接触

python3 输出的方法:print()  括号中可以用双引号、单引号引用文本,也可以输出变量、输出公式等

同样的,input()的使用方法也一样

字符串可以直接用加号 + 连接,如输出print("well water "+"river"),就可以合在一起,输出well water river

字符串乘以一个数字n,可以输出n遍字符串

2、用python设计第一个游戏

python与C like语言(如C、C#、C++)等相比,不需要有变量声明,也没有大括号,但是要严格对齐,缩进量保持一致

只要打了冒号,下一行都要缩进

BIF = Built in function 内置函数

在shell中输入dir(__builtins__),就可以输出所有的BIF,(纯小写的函数)

用help(**)输入BIF的名字,就可以输出使用方法

3 小插曲之变量和字符串

变量的命名理论上可以取任何合法的名字,但作为一个优秀的程序员,请尽量给变量取一个专业一点的名字

创建字符串的时候,要在两边加上引号,可以是单引号,也可以是双引号,但必须配对

如果在字符串中需要出现单引号或双引号,可以使用转义符号(\)对字符串中的引号进行转义

我们可以使用反斜杠对自身进行转义,如str = "C:\\now",直接str会输出C:\\now,但如果是print(str),会输出C:\now

如果字符串中有多个反斜杠,则只需要在字符串前加一个r即可,可起到与上述相同的功能,自动在反斜杠前进行转义

在原始字符串的结尾是不能加反斜杠的,否则会报错

如果希望得到一个跨越多行的字符串,这就需要使用三重引号字符串(可以是单引号,也可以是双引号)

4 闲聊之python的数据类型

python的数值类型:整型、浮点型、布尔类型(True和False)

e记法(科学计数法,用来表示非常大的数和非常小的数,如1.5e11,表示1.5*10的11次方)

类型转换(字符串、整型、浮点型)

int()(注意浮点型转整型时会直接砍掉小数部分,而不是四舍五入)

float()、str()

获得关于类型的信息:

(1) type(),如a = '520' ,type(a),则会输出

(2)isinstance(),如a = '小甲鱼', isinstance(a,str)则会返回True,意思是会判断函数中第一个参数类型是否是第二个参数的类型,如果是则返回True,否则返回False

5 Python之常用操作符

算术操作符:+ - * / % ** //

注意://表示地板除法,即整数除以整数,得到的还是整数,如果是单斜杠,在python3中会得到真实小数值

**是幂运算操作符,如3**2表示3的2次方

比较操作符:> < >= <= == != 返回True或False

逻辑操作符:and、or、not 结果输出True False

优先级问题:幂运算>正负号>算术操作符>比较操作符>逻辑运算符

6 了不起的分支和循环01

7 了不起的分支和循环02

python可以有效避免“悬挂else”,即else和if没有正确匹配,因为python是使用缩进来进行对齐匹配

条件表达式(三元操作符):有了三元操作符的条件表达式,可以使用一条语句来完成条件判断和赋值操作,如small = x if x< y else y

断言(assert):当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常,便于调试找到问题所在,如assert 3 >4,会返回AssertionError,一般来说我们可以用它在程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。

8 了不起的分支和循环03

for循环语法:

for 目标 in 表达式:

循环体

range()语法(常与for搭配使用):

range([start,] stop[,step=1])

这个BIF有三个参数,其中用中括号括起来的两个表示这两个参数是可选的

step=1表示第三个参数的值默认是1,表示步进数

range这个BIF的作用是生成一个从start参数的值开始到stop参数的值结束的数字序列,注意不包含stop数

break:跳出当前循环

continue:终止本轮循环,并开始下一轮循环

9 列表:一个打了激素的数组01

列表可以把python中的一切东西打包,如整数、浮点数、字符串、对象,比数组更强大

向列表中添加元素:

append(),如member = [1,2,3,4,5],member.append(6),则member输出[1,2,3,4,5,6],但是append()只能一个一个加,不能同时添加两个元素,这时候要用到extend方法

extend():是用一个列表来扩展另一个列表,如member.extend([7,8]),则输出[1,2,3,4,5,6,7,8]

insert():有两个参数,第一个参数表示插入的位置,第二个参数表示插入的元素,如member.insert(1,0),则输出[1,0,2,3,4,5,6,7,8],注意序数都是从0数起

10 列表:一个打了激素的数组02

从列表中获取元素:跟数组一样,可以通过元素的索引值(index)从列表中获取单个元素,注意,列表索引值是从0开始的

从列表中删除元素:

remove():直接删除元素,不需要知道在哪个位置,如member.remove(0),则输出[1,2,3,4,5,6,7,8]

del  不是一个函数,也不是方法,所以不用加括号, 如del member·[0],则输出[2,3,4,5,6,7,8]

pop():从列表中取出最后一个元素删除并返回,如member.pop(),则返回8,member就变为[2,3,4,5,6,7]

列表分片(slice):利用索引值,每次可以从列表中获取一个元素,但是如果要一次性获取多个元素,则需要列表分片。如member[1:3],则输出[3,4],但原列表并没有变化,还是[2,3,4,5,6,7]

11 列表:一个打了激素的数组03

列表常用操作符:比较操作符、逻辑操作符、重复操作符(*)、赋值操作符、成员关系操作符

列表的比较是从第0个元素开始比较,能判断出大小就不会继续判断后边的元素

如果要访问列表中的列表中的元素,则采用类似于二维数组的方法,如list[1][1],则表示输出列表list中第2个元素(列表)中的第二个元素

列表中的其他小伙伴:

如member = [1,1,2,3,4,5,6]

member.cout(1) 输出为2 ,表示1的个数

member.index(2) 输出为2,表示2的索引值为2

member.reverse() 表示将列表翻转,前后顺序改变,则输出[6,5,4,3,2,1,1]

member.sort()表示将列表中元素从小到大排序,则输出[1,1,2,3,4,5,6]

注意拷贝的区别:必须得用上一节的分片拷贝方法,如list1 = list[:],而不能直接list1 = list[],虽然表面上结果一样,但实际上直接=时,只是添加了一个指向,当原list发生变化时,直接=的list也会发生变化。但是如果用分片的方法拷贝,则会重新加一个列表,而不是简单的指向,原列表发生变化时,复制后的列表不会发生相应改变。因此,为了避免出现bug,复制时一定要用分片的方法,加上冒号

12 元祖(tuple):戴上了枷锁的列表

由于元祖和列表是近亲关系,所以在实际使用上是非常相似的。最大区别是列表可以随便更改元素,但元祖不可改变。

创建元祖的方法:大部分情况下是使用小括号(列表是中括号),如tuple1 = (1,2,3,4,5,6)

访问的方法和元祖类似,tuple[1],则返回2,其它的访问方法类似

注意元祖的关键标志不是小括号,而是逗号,如temp = (1),则temp的类型是int,如果temp = 1,2  则temp的类型就是元祖,即使只有一个元素,后边也得加上逗号,括号不是最必要的

13 字符串:各种奇葩的内置方法

http://bbs.fishc.com/forum.php?mod=viewthread&tid=38992&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403

14 字符串:格式化

 格式化的目的相当于翻译,将数据以要求的格式输出,如转化成十进制、十六进制等等

http://bbs.fishc.com/forum.php?mod=viewthread&tid=92997&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403

format方法

"{0} love {1}.{2}".format("I","FishC","com"),则输出 I love FishC.com

"{a} love {b}.{c}".format(a="I",b="FishC",c="com"),则输出 I love FishC.com

"{a} love {b}.{0}".format(a="I",b="FishC","com"),则输出 I love FishC.com

15 序列!序列!

列表、元祖、字符串的共同点:

  • 都可以通过索引得到每一个元素
  • 默认索引值都是从0开始
  • 可以通过分片的方法得到一个范围内的元素的集合
  • 有很多共同的操作符(重复操作符、拼接操作符、成员操作符)

list()可以把字符串、元祖等变成列表

tuple()把一个可迭代对象转化成元祖

str()把对象转化成字符串

len(sub)返回参数sub的长度,sub可以是列表、元祖、字符串

max()返回参数中的最大值(但要求序列中元素的类型保持一致)

min()返回参数中的最小值(但要求序列中元素的类型保持一致)

sum()返回序列中元素的和(不能对字符串操作,但要求序列中元素的类型保持一致)

sorted()将序列从小到大排序

reversed()将序列元素倒转)(返回对象,list一下可以显示)

enumerate()将列表中的元素变成元祖,并且每个元素前加上索引值(返回对象,list一下可以显示)

zip()将两个序列中的对应元素合并起来,多余的就删掉(返回对象,list一下可以显示)

16 函数:Pyhon的乐高积木

 定义一个函数:def  func():

                            print("这是一个函数")

17 函数:灵活即强大

函数文档:定义函数的时候,最好有备注说明,方便维护,调用函数文档的方法(1)func.__doc__ (2)help(func)

关键字参数:调用函数时,可以用给形参赋值的方法,来避免参数顺序乱了后造成的结果不一致

默认值参数:在函数定义的时候,给形参默认赋值,这样调用函数的时候即使没有赋值,也会有结果输出,但如果调用时重新赋值,会按照实际赋值输出结果

收集参数(可变参数):在形参前加上*号,这样即使定义一个,实际调用时,可以用多个实参,只需要用逗号隔开就好,原理是python默认将所有的参数打包成一个元祖处理

18 函数:我的地盘听我的

python所有的函数都会有返回的,默认会返回none,所以即使没有return,也可以用赋值语句调用函数

python可以用列表的形式返回多个值,如果不加括号,会返回元祖

如果在函数中试图修改全局变量,python会在函数中新建一个名字一样的局部变量,不会影响到全局变量的值,即函数可以访问全局变量,但不能修改全局变量(下一节提供修改方法)

19 函数:内嵌函数和闭包

如果想要在函数中修改全局变量,需要在函数中添加global声明,即在变量前添加global,即可在函数中修改全局变量

函数可以嵌套定义,即在函数中继续定义函数,但是内嵌的函数作用域只存在于外围函数,而在其它地方无法调用

nonlocal和global的作用类似,可以用来调用修改函数外围的变量

20 函数:lambda表达式

lambda x : 2 *x+1   表示定义了变量为x的2x+1的函数,而不需要定义函数名字

lambda函数的作用:

  • python写一些执行脚本时,使用lambda就可以省下来函数过程,比如我们只是写个简单的脚本来管理服务器时间,我们就不需要专门定义一个函数然后写调用,使用lambda就可以使得代码更加精简
  • 对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,有时候给函数起个名字也是比较头疼的问题,使用lambda就不用考虑命名的问题了
  • 简化代码的可读性,由于普通的函数阅读经常要调到开头def定义部分,使用lambda函数可以省去这样的步骤

filter():过滤器 如果第一个参数为None,则会去掉第二个参数非True的内容;第一个参数也可以输入有值的表达式,也可以过滤特定的需要的数据

map():映射 会将第二个参数序列中的值依次放到第一个参数中的表达式,来输出结果

21 函数:递归是神马

函数调用自身的行为就是递归,并且要有正确的返回条件,否则会陷入死循环

22 递归:这帮坑爹的小兔崽子

递归比较简单,但某些情况下实现效率比迭代低

23 递归:汉诺塔

24 字典:当索引不好用时01

字典是python中的映射类型,区别于之前提到的序列类型(列表、元祖、字符串)

字典用大括号{}创建表示,注意字典不是序列类型

字典有两个关键元素,分别是key(键)和value(值),如dict = { ' 李宁 ' : ' 一切皆有可能 ' , ' 耐克 ' : ' Just Do It ' }

访问方法 print('李宁的口号是:' , dict['李宁'])

25 字典:当索引不好用时02

fromkeys():创建并返回新的字典,有两个参数,第一个参数是key,第二个参数是value,默认为空;注意后边的value是给每个key赋值,而不是依次赋值

访问字典的方法:

keys():返回字典的键值

values():返回字典的键对应的值

items():返回字典的每一项,用元祖的形式打印,包括键和值

注意如果要清空字典,要用clear()的方法

copy()浅拷贝,注意区分赋值与浅拷贝的区别,赋值地址没变,只是给原数据重新贴了标签,当原数据变化时,赋值的也会变化,copy则有不同的地址,原数据变化后不会有变化

popitem():随机弹出一组键和值,因为字典中没有顺序

update():用另一个字典更新字典中的value

你可能感兴趣的:(Python)