python学习笔记

作为一个python小白,完全从零基础开始学习 。在学习中主要是参考着Java的语法在学习python。下面是我在这次的学习中总结的一些pyhton需要我注意的地方(在我心中与Java不一样的地方),我的目标其实很简单,能够看懂并能做简单修改就可以了。

参考文档:

实验楼python简明教程

https://www.shiyanlou.com/courses/596

廖雪峰python

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

Python 入门指南(中文)

http://www.pythondoc.com/pythontutorial3/index.html

Python for you and me(英文)

http://pymbook.readthedocs.io/en/latest/

https://www.python.org/

 

Python简介

Python 是一个脚本语言,你可以在 Python 解释器中直接写代码或者将代码写到一个文件里,然后执行这个文件(即脚本文件)。

在 Python 中,空格很重要,我们使用空格将标识符区分开,行开始处的空格我们称之为缩进,如果你的缩进是错误的,Python 解释器会抛出错误。

一、建议遵守以下约定:

1、使用 4 个空格来缩进

2、、永远不要混用空格和制表符

3、在函数之间空一行

4、在类之间空两行

5、字典,列表,元组以及参数列表中,在 , 后添加一个空格。对于字典,: 后面也添加一个空格

6、在赋值运算符和比较运算符周围要有空格(参数列表中除外),但是括号里侧不加空格:a = f(1, 2) + g(3, 4)

7、Python 的注释以 # 字符开始的,在 # 字符到行尾之间的所有东西都被程序忽略为注释,也就说对程序没有任何影响。

8、模块是包含了我们能复用的代码的文件,包含了不同的函数定义,变量。模块文件通常以 .py 为扩展名。

二、Python3 的关键字

False               def                 if                  raise

None                del                 import              return

True                elif                in                  try

and                 else                is                  while

as                  except              lambda              with

assert              finally             nonlocal            yield

break               for                 not                

class               from                or                 

continue            global              pass

在 Python 中 我们不需要为变量指定数据类型。在 Python 中 我们不需要为变量指定数据类型。

三、运算符和表达式

控制流 If-else

语法如下:

if expression:

do this

else

    do this

else:

   do this

如果表达式 expression 得值为真(不为零的任何值都为真),程序将执行缩进后的内容。务必要使用正确的缩进,在表达式为真的情况将会执行缩进的所有行。

while 语句的语法如下:

while condition:

    statement1

    statement2

想要多次执行的代码必须以正确的缩进放在 while 语句下面。在表达式 condition 为真的时候它们才会执行。同 if-else 一样,非零值为真。

四、列表的数据结构。

它可以写作中括号之间的一列逗号分隔的值。列表的元素不必是同一类型

备注:就是数组

列表的方法 a.append(45) 添加元素 45 到列表末尾。你可以看到元素 45 已经添加到列表的末端了。有些时候我们需要将数据插入到列表的任何位置,这时我们可以使用列表的 insert() 方法。列表方法 count(s) 会返回列表元素中 s 的数量。

 remove()

 reverse()

sort()

del 关键字删除指定位置的列表元素

列表推导式由包含一个表达式的中括号组成,表达式后面跟随一个 for 子句,之后可以有零或多个 for 或 if 子句。结果是一个列表,由表达式依据其后面的 for 和 if 子句上下文计算而来的结果构成。

例如,如下的列表推导式结合两个列表的元素,如果元素之间不相等的话:

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]

[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

等同于: 

>>> combs = []

>>> for x in [1,2,3]:

...     for y in [3,1,4]:

...         if x != y:

...             combs.append((x, y))

...

>>> combs

[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

值得注意的是在上面两个方法中的 for 和 if 语句的顺序。

 

列表推导式也可以嵌套。

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

>>> z = [x + 1 for x in [x ** 2 for x in a]]

>>> z

[2, 5, 10]

如果我们使用负数的索引,那将会从列表的末尾开始计数

你甚至可以把它切成不同的部分,这个操作称为切片,例子在下面给出: 

>>> a[0:-1]

[1, 342, 223, 'India']

>>> a[2:-2]

[223]

切片并不会改变正在操作的列表,切片操作返回其子列表,

切片的索引有非常有用的默认值;省略的第一个索引默认为零,省略的第二个索引默认为切片的字符串的大小:

 

 五、Python 里的 for 循环与 C 语言中的不同。这里的 for 循环遍历任何序

 如同 break ,我们可以在循环中使用另一个语句 continue。它会跳过其后的代码回到循环开始处执行。这意味着它可以帮助你跳过部分循环。

 

六、元组是由数个逗号分割的值组成。

元组是不可变类型,这意味着你不能在元组内删除或添加或编辑任何值。

 

七、集合是一个无序不重复元素的集。

基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 symmetric difference(对称差集)等数学运算。

从集合中添加add()或弹出pop()元素

大括号或 set() 函数可以用来创建集合。注意:想要创建空集合,你必须使用 set() 而不是 {}。

 

八、字典是是无序的键值对(key:value)集合,同一个字典内的键必须是互不相同的。一对大括号 {} 创建一个空字典。初始化字典时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。我们使用键来检索存储在字典中的数据。

创建新的键值对很简单:

>>> data['parthan'] = 'Ubuntu'

>>> data

{'kushal': 'Fedora', 'Jace': 'Mac', 'kart_': 'Debian', 'parthan': 'Ubuntu'}

使用 del 关键字删除任意指定的键值对:

>>> del data['kushal']

>>> data

{'Jace': 'Mac', 'kart_': 'Debian', 'parthan': 'Ubuntu'

使用 in 关键字查询指定的键是否存在于字典中。

>>> 'ShiYanLou' in data

False

必须知道的是,字典中的键必须是不可变类型,比如你不能使用列表作为键。

dict() 可以从包含键值对的元组中创建字典。 

>>> dict((('Indian','Delhi'),('Bangladesh','Dhaka')))

{'Indian': 'Delhi', 'Bangladesh': 'Dhaka'}

如果你想要遍历一个字典,使用字典的 items() 方法。

>>> data

{'Kushal': 'Fedora', 'Jace': 'Mac', 'kart_': 'Debian', 'parthan': 'Ubuntu'}

>>> for x, y in data.items():

...     print("{} uses {}".format(x, y))

...

Kushal uses Fedora

Jace uses Mac

kart_ uses Debian

parthan uses Ubuntu

许多时候我们需要往字典中的元素添加数据,我们首先要判断这个元素是否存在,不存在则创建一个默认值。如果在循环里执行这个操作,每次迭代都需要判断一次,降低程序性能。

 我们可以使用 dict.setdefault(key, default) 更有效率的完成这个事情。 

>>> data = {}

>>> data.setdefault('names', []).append('Ruby')

>>> data

{'names': ['Ruby']}

>>> data.setdefault('names', []).append('Python')

>>> data

{'names': ['Ruby', 'Python']}

>>> data.setdefault('names', []).append('C')

>>> data

{'names': ['Ruby', 'Python', 'C']}

试图索引一个不存在的键将会抛出一个 keyError 错误。我们可以使用 dict.get(key, default) 来索引键,如果键不存在,那么返回指定的 default 值。

>>> data['foo']

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

KeyError: 'foo'

>>> data.get('foo', 0)

0

如果你想要在遍历列表(或任何序列类型)的同时获得元素索引值,你可以使用 enumerate()。

>>> for i, j in enumerate(['a', 'b', 'c']):

...     print(i, j)

...

0 a

1 b

2 c

你也许需要同时遍历两个序列类型,你可以使用 zip() 函数。

>>> a = ['Pradeepto', 'Kushal']

>>> b = ['OpenSUSE', 'Fedora']

>>> for x, y in zip(a, b):

...     print("{} uses {}".format(x, y))

...

Pradeepto uses OpenSUSE

Kushal uses Fedora

九、字符串的3种表示

 单引号('...')或双引号("...")你想要分几行输入字符串,并且希望行尾的换行符自动包含到字符串当中,可以使用三对引号:"""...""" 或 '''...'''

字符串的分割、连接、大小写转换、搜索等常用操作

十、函数的定义

使用关键字 def 来定义一个函数

 

十一、局域/全局变量的概念

通过关键字 global 来告诉 a 的定义是全局的 

默认参数,关键字参数及强制关键字参数

函数的参数变量可以有默认值,也就是说如果我们对指定的参数变量没有给出任何值则会赋其默认值。

函数可以通过关键字参数的形式来调用

在 Python 里我们使用文档字符串(docstrings)来说明如何使用代码,这在交互模式非常有用,也能用于自动创建文档。

十二、文档字符串的使用

#!/usr/bin/env python3

import math

 

def longest_side(a, b):

    """

    Function to find the length of the longest side of a right triangle.

 

    :arg a: Side a of the triangle

    :arg b: Side b of the triangle

 

    :return: Length of the longest side c as float

    """

    return math.sqrt(a*a + b*b)

 

if __name__ == '__main__':

    print(longest_side.__doc__)

    print(longest_side(4,5))

 

十三、高阶函数,map() 函数

高阶函数(Higher-order function)或仿函数(functor)是内部至少含有一个以下步骤的函数:

使用一个或多个函数作为参数

返回另一个函数作为输出

Python 里的任何函数都可以作为高阶函数。

map 是一个在 Python 里非常有用的高阶函数。它接受一个函数和一个序列(迭代器)作为输入,然后对序列(迭代器)的每一个值应用这个函数,返回一个序列(迭代器),其包含应用函数后的结果。

其它高级语言常见的函数重载,Python 是没有的,这是因为 Python 有默认参数这个功能,函数重载 的功能大都可以使用默认参数达到。

十四、文件打开模式

我们使用 open() 函数打开文件。它需要两个参数,第一个参数是文件路径或文件名,第二个是文件的打开模式。模式通常是下面这样的:

"r",以只读模式打开,你只能读取文件但不能编辑/删除文件的任何内容

"w",以写入模式打开,如果文件存在将会删除里面的所有内容,然后打开这个文件进行写入

"a",以追加模式打开,写入到文件中的任何数据将自动添加到末尾

默认的模式为只读模式,也就是说如果你不提供任何模式,open() 函数将会以只读模式打开文件。

打开文件后我们应该总是关闭文件。我们使用方法 close() 完成这个操作。

始终确保你显式关闭每个打开的文件,一旦它的工作完成你没有任何理由保持打开文件。因为程序能打开的文件数量是有上限的。如果你超出了这个限制,没有任何可靠的方法恢复,因此程序可能会崩溃。每个打开的文件关联的数据结构(文件描述符/句柄/文件锁...)都要消耗一些主存资源。因此如果许多打开的文件没用了你可以结束大量的内存浪费,并且文件打开时始终存在数据损坏或丢失的可能性。 

十五、文件读取与写入

使用 read() 方法一次性读取整个文件。

如果你再一次调用 read(),它会返回空字符串因为它已经读取完整个文件。

read(size) 有一个可选的参数 size,用于指定字符串长度。如果没有指定 size 或者指定为负数,就会读取并返回整个文件。当文件大小为当前机器内存两倍时,就会产生问题。反之,会尽可能按比较大的 size 读取和返回数据。

readline() 能帮助你每次读取文件的一行。

 write() 方法打开一个文件然后我们随便写入一些文本。

十六、with 语句

实际情况中,我们应该尝试使用 with 语句处理文件对象,它会在文件用完后会自动关闭,就算发生异常也没关系。它是 try-finally 块的简写:

十七、lscpu 命令的实现

在 Linux 下你可以使用 lscpu 命令来查看当前电脑的 CPU 相关信息

NameError

当有人试图访问一个未定义的变量则会发生 NameError。

TypeError

TypeError 也是一种经常出现的异常。当操作或函数应用于不适当类型的对象时引发,一个常见的例子是对整数和字符串做加法

 

十九、异常处理(try..except)

我们使用 try...except 块来处理任意异常。

 它以如下方式工作:

首先,执行 try 子句 (在 try 和 except 关键字之间的部分)。

如果没有异常发生,except 子句 在 try 语句执行完毕后就被忽略了。

如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。

如果异常匹配于 except 关键字后面指定的异常类型,就执行对应的 except 子句。然后继续执行 try 语句之后的代码。

如果发生了一个异常,在 except 子句中没有与之匹配的分支,它就会传递到上一级 try 语句中。

如果最终仍找不到对应的处理语句,它就成为一个 未处理异常,终止程序运行,显示提示信息。

异常抛出(raise)

使用 raise 语句抛出一个异常

 

二十一、finally 子句

 try 语句还有另一个可选的 finally 子句,目的在于定义在任何情况下都一定要执行的功能。

不管有没有发生异常,finally 子句 在程序离开 try 后都一定会被执行。当 try 语句中发生了未被 except 捕获的异常(或者它发生在 except 或 else 子句中),在 finally 子句执行完后它会被重新抛出。

在真实场景的应用程序中,finally 子句用于释放外部资源(文件或网络连接之类的),无论它们的使用过程中是否出错。

二十二、类的定义

Class声明类

类的实例化使用函数符号。只要将类对象看作是一个返回新的类实例的无参数函数即可

对象初始化

二十三、模块的导入

模块是包括 Python 定义和声明的文件。文件名就是模块名加上 .py 后缀。

我们必须使用模块名来访问模块内的函数。

import bars

从模块中导入指定的函数。

>>> from bars import simplebar, starbar

含有 __init__.py 文件的目录可以用来作为一个包,目录里的所有 .py 文件都是这个包的子模块

含有 __init__.py 文件的目录可以用来作为一个包,目录里的所有 .py 文件都是这个包的子模块

 os 模块提供了与操作系统相关的功能

默认/第三方模块介绍

可以使用 get() 方法获取任意一个网页

 

二十四、命令行参数 

collections是Python内建的一个集合模块,提供了许多有用的集合类

Counter 类

defaultdict 类

namedtuple 类

 

posted @ 2018-03-17 16:51  2017dong  阅读(321)  评论(0编辑  收藏  举报