python入门4

imooc.com

python 入门

一,课程介绍
python适合的领域
1.web网站和各种网络服务
2.系统工具和脚本
3.作为胶水语言把其他语言开发的模块包装起来方便使用

python不适合的领域
1.贴近硬件的代码 (首选c)
2.移动开发 :ios/android有各自的开发语言 objc,swift/java
3.游戏开发:c/c++

python源码没法加密

第二章 安装python

python的版本:2.7版 3.3版 语法上不兼容 本次用2.7 有些第三方库不能在3.3上用

windows 32位操作系统下载地址:https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi

第一个python程序
print ‘hello,world.’
exit()
另存为.py

注意:首行不能有空格,python对缩进要求严格

第三章 python变量和数据类型

3.1 Python中数据类型
计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处

理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数

据类型。在Python中,能够直接处理的数据类型有以下几种:

一、整数

Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,

例如:1,100,-8080,0,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:

0xff00,0xa5b4c3d2,等等。

二、浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如

,1.23x10^9和12.3x10^8是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的

浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5

,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮

点数运算则可能会有四舍五入的误差。

三、字符串

字符串是以”或”“括起来的任意文本,比如’abc’,”xyz”等等。请注意,”或”“本身只是一种表示方式,不是字符

串的一部分,因此,字符串’abc’只有a,b,c这3个字符。

四、布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中

,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。

布尔值可以用and、or和not运算。

and运算是与运算,只有所有都为 True,and运算结果才是 True。

or运算是或运算,只要其中有一个为 True,or 运算结果就是 True。

not运算是非运算,它是一个单目运算符,把 True 变成 False,False 变成 True。

五、空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,我们后面会继续讲到

任务
试一试,在右边编辑器中,完成以下任务:

  1. 计算十进制整数 45678 和十六进制整数 0x12fd2 之和。

  2. 请用字符串表示出Learn Python in imooc。

  3. 请计算以下表达式的布尔值(注意==表示判断是否相等):

    100 < 99

    0xff == 255

注意:使用print命令

3.2 python之print语句
print语句可以向屏幕上输出指定的文字。
print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出:
print会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是这样拼起来的:

3.3 python的注释

Python的注释以 # 开头,后面的文字直到行尾都算注释

3.4 python中什么是变量

在Python程序中,变量是用一个变量名表示,变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字
开头

在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型

的变量

这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。

静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,

3.5 Python中定义字符串
字符串可以用”或者”“括起来表示。

如果字符串本身包含’怎么办?比如我们要表示字符串 I’m OK ,这时,可以用” “括起来表示:

“I’m OK”
类似的,如果字符串包含”,我们就可以用’ ‘括起来表示:

‘Learn “Python” in imooc’
如果字符串既包含’又包含”怎么办?

这个时候,就需要对字符串的某些特殊字符进行“转义”,Python字符串用\进行转义。

要表示字符串 Bob said “I’m OK”.
由于 ’ 和 ” 会引起歧义,因此,我们在它前面插入一个\表示这是一个普通字符,不代表字符串的起始,因此,这

个字符串又可以表示为

‘Bob said \”I\’m OK\”.’
注意:转义字符 \ 不计入字符串的内容中。

常用的转义字符还有:

\n 表示换行
\t 表示一个制表符
\ 表示 \ 字符本身

3.6 Python中raw字符串与多行字符串
Python中raw字符串与多行字符串
如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们

可以在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了。例如:

r’(~_~)/ (~_~)/’
但是r’…’表示法不能表示多行字符串,也不能表示包含’和 “的字符串(为什么?)

如果要表示多行字符串,可以用”’…”’表示:

”’Line 1
Line 2
Line 3”’
上面这个字符串的表示方法和下面的是完全一样的:

‘Line 1\nLine 2\nLine 3’
还可以在多行字符串前面添加 r ,把这个多行字符串也变成一个raw字符串:

r”’Python is created by “Guido”.
It is free and easy to learn.
Let’s start learn Python in imooc!”’

3.7 Python中Unicode字符串
Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u’…’表示,比如:

print u’中文’
中文
注意: 不加 u ,中文就不能正常显示。

Unicode字符串除了多了一个 u 之外,与普通字符串没啥区别,转义字符和多行表示法仍然有效:

转义:

u’中文\n日文\n韩文’
多行:

u”’第一行
第二行”’
raw+多行:

ur”’Python的Unicode字符串支持”中文”,
“日文”,
“韩文”等多种语言”’
如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在

第一行添加注释

– coding: utf-8 –

目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++ 另存为… 并选择UTF-8格式保存。

3.8 Python中整数和浮点数
Python的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数.
整数和浮点数混合运算的结果就变成浮点数了.
Python提供了一个求余的运算 % 可以计算余数.

3.9 Python中布尔类型

与运算:只有两个布尔值都为 True 时,计算结果才为 True。
或运算:只要有一个布尔值为 True,计算结果就是 True。
非运算:把True变为False,或者把False变为True:
Python把0、空字符串”和None看成 False,其他数值和非空字符串都看成 True

第四章 List 和 Tuple 类型

4.1 Python创建list

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。

比如,列出班里所有同学的名字,就可以用一个list表示:

[‘Michael’, ‘Bob’, ‘Tracy’]
[‘Michael’, ‘Bob’, ‘Tracy’]
list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的。

构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。通常,我们会

把list赋值给一个变量,这样,就可以通过变量来引用list:

classmates = [‘Michael’, ‘Bob’, ‘Tracy’]
classmates # 打印classmates变量的内容
[‘Michael’, ‘Bob’, ‘Tracy’]
由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各

种数据:

L = [‘Michael’, 100, True]
一个元素也没有的list,就是空list:

empty_list = []

4.2 Python按照索引访问list

索引从 0 开始,也就是说,第一个元素的索引是0,第二个元素的索引是1,以此类推。IndexError意思就是索引超

出了范围,使用索引时,千万注意不要越界。

4.3 Python之倒序访问list
用 -1 这个索引来表示最后一个元素。
类似的,倒数第二用 -2 表示,倒数第三用 -3 表示,倒数第四用 -4 表示。
使用倒序索引时,也要注意不要越界。

4.4 Python之添加新元素

append()总是把新的元素添加到 list 的尾部。
insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素。
L.insert(0, ‘Paul’) 的意思是,’Paul’将被添加到索引为 0 的位置上(也就是第一个),而原来索引为 0 的

Adam同学,以及后面的所有同学,都自动向后移动一位。

4.5 Python从list删除元素

pop()方法总是删掉list的最后一个元素,并且它还返回这个元素,所以我们执行 L.pop() 后,会打印出 ‘Paul’。
要把Paul踢出list,我们就必须先定位Paul的位置。由于Paul的索引是2,因此,用 pop(2)把Paul删掉。

4.6 Python中替换元素

对list中的某一个索引赋值,就可以直接用新的元素替换掉原来的元素,list包含的元素个数保持不变。

4.7 Python之创建tuple

tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不

能修改了。
创建tuple和创建list唯一不同之处是用( )替代了[ ]。
tuple没有 append()方法,也没有insert()和pop()方法。
获取 tuple 元素的方式和 list 是一模一样的,我们可以正常使用 t[0],t[-1]等索引方式访问元素,但是不能赋

值成别的元素。

4.8 Python之创建单元素tuple

包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示
t = ()

Python 规定,单元素 tuple 要多加一个逗号“,”
t = (1,)

Python在打印单元素tuple时,也自动添加了一个“,”,为了更明确地告诉你这是一个tuple。

多元素 tuple 加不加这个额外的“,”效果是一样的:

4.9 Python之“可变”的tuple

tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变

。即指向’a’,就不能改成指向’b’,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

第五章 条件判断和循环

5.1 Python之if语句

注意: Python代码的缩进规则。
具有相同缩进的代码被视为代码块
缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起

的语法错误。

如果你在Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车:

5.2 Python之 if-else

注意: else 后面有个“:”。

5.3 Python之 if-elif-else

特别注意: 这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断

就直接忽略,不再执行了。

5.4 Python之 for循环

L = [‘Adam’, ‘Lisa’, ‘Bart’]
for name in L:
print name

5.5 Python之 while循环

特别留意while循环的退出条件

5.6 Python之 break退出循环

用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用 break 语句。

5.7 Python之 continue继续循环

5.8 Python之 多重循环

第六章 Dict 和 Set 类型

6.1 Python之什么是dict

花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。

由于dict也是集合,len() 函数可以计算任意集合的大小。

6.2 Python之访问dict

可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应

的元素,而dict使用key。
使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None

6.3 Python中dict的特点

dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着

元素增加而逐渐下降。

不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存

小,但是查找速度慢。

由于dict是按 key 查找,所以,在一个dict中,key不能重复。

dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样。
dict内部是无序的,不能用dict存储有序的集合。

dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可

以作为 key。但是list是可变的,就不能作为 key。

6.4 Python更新dict

如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value。

6.5 Python之 遍历dict

由于dict也是一个集合,所以,遍历dict和遍历list类似,都可以通过 for 循环实现。

6.6 Python中什么是set

dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
打印set的形式类似 list, 但它不是 list,仔细看还可以发现,打印的顺序和原始 list 的顺序有可能是不同的

,因为set内部存储的元素是无序的。set不能包含重复的元素

6.7 Python之 访问set

由于set存储的是无序集合,所以我们没法通过索引来访问。
访问 set中的某个元素实际上就是判断一个元素是否在set中。
可以用 in 操作符判断

6.8 Python之 set的特点

set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。

set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。

最后,set存储的元素也是没有顺序的。

6.9 Python之 遍历set

由于 set 也是一个集合,所以,遍历 set 和遍历 list 类似,都可以通过 for 循环实现。

6.10 Python之 更新set

添加元素时,用set的add()方法:
删除set中的元素时,用set的remove()方法:

第七章 函数

7.1 Python之什么是函数
函数就是最基本的一种代码抽象的方式
Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用。

7.2 Python之调用函数

可以直接从Python的官方网站查看文档:
http://docs.python.org/2/library/functions.html#abs

也可以在交互式命令行通过 help(abs) 查看abs函数的帮助信息。

求绝对值的函数 abs,它接收一个参数。

比较函数 cmp(x, y) 就需要两个参数

int()函数可以把其他数据类型转换为整数

str()函数把其他类型转换成 str

7.3 Python之编写函数

在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中

编写函数体,函数的返回值用 return 语句返回。

如果没有return语句,函数执行完毕后也会返回结果,只是结果为 None。

return None可以简写为return。

7.4 Python函数之返回多值

math包提供了sin()和 cos()函数,我们先用import引用它:

在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,

Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

x = (-b+-(b*b-4ac)开平方)/2a

7.5 Python之递归函数

使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

7.6 Python之定义默认参数
由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面.

7.7 Python之定义可变参数

如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:

def fn(*args):
print args
Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。

第八章 切片

8.1 对list进行切片
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
如果第一个索引是0,还可以省略:

L[:3]

也可以从索引1开始,取出2个元素出来:
只用一个 : ,表示从头到尾:
L[:]实际上复制出了一个新list。
切片操作还可以指定第三个参数:

L[::2]
[‘Adam’, ‘Bart’]

第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。

8.2 倒序切片
对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片.
记住倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。

8.3 对字符串切片
字符串 ‘xxx’和 Unicode字符串 u’xxx’也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串。
在很多编程语言中,针对字符串提供了很多各种截取函数,其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。

第九章 迭代

9.1 什么是迭代
因为 Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。
因此,迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。

注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括:
1. 有序集合:list,tuple,str和unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict
而迭代是一个动词,它指的是一种操作,在Python中,就是 for 循环。

迭代与按下标访问数组最大的不同是,后者是一种具体的迭代实现方式,而前者只关心迭代结果,根本不关心迭代内部是如何实现的。

9.2 索引迭代
Python中,迭代永远是取出元素本身,而非元素的索引。
对于有序集合,元素确实是有索引的。
在 for 循环中拿到索引,方法是使用 enumerate() 函数。
索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。

9.3 迭代dict的value
dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value。
dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样。

那这两个方法有何不同之处呢?

  1. values() 方法实际上把一个 dict 转换成了包含 value 的list。

  2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。

  3. 打印 itervalues() 发现它返回一个 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。

如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。

9.4 迭代dict的key和value

items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value。
和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。

第十章 列表生成式

10.1 生成列表

写列表生成式时,把要生成的元素 x * x 放到前面,后面跟 for 循环,就可以把list创建出来。

10.2 复杂表达式
注:字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。

10.3 条件过滤

列表生成式的 for 循环后面还可以加上 if 判断。
有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。
1. isinstance(x, str) 可以判断变量 x 是否是字符串;
2. 字符串的 upper() 方法可以返回大写的字母。

10.4 多层表达式

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值