Python 入门笔记

  • 2019 年 10 月 30 日
  • 笔记

Python 入门非常简单,但是对于 Python 的基础知识确也有许多非常重要的内容,为了入门,我决定重新学习一遍 Python。首先从网上的课程开始。

raw

当一个字符串有有需要转义的词的时候,需要用 将内容转义,但是如果一个字符串中有太多需要转义的内容的话,就可以使用 raw 标识这个字符串,用来减少 转义的次数。

r'(-_-)/ (-_-)/'

对于多行的字符串,可以使用 n , 也可以使用 ''' 将多行字符串进行表示。即:

'''Python is created by  Guido.  Test'''

对于 Python 中使用中文,可以使用 u'' 的形式进行调整,也可以使用 # -*- coding: utf-8 -*- ,这样的话,整个文件都是使用的 utf-8 进行编译,就不会有问题了。

List

对于 Python 中的 List ,如果想要将数据插入到队尾,要叫使用 append() 方法,如果想插入到一个非队尾的位置,可以使用 insert(position, value) 的方法将数据插入。

L = [1,2,5,6]  L.append(7)  print(L)  L.insert(3, 88)  print(L)
[1, 2, 5, 6, 7]  [1, 2, 5, 88, 6, 7]

而在删除元素的时候,则使用 pop() 方法,而且在移除元素的同时,还会将数据打印出来。

L = [1,2,5,6]  L.append(7)  L.insert(3, 88)  print(L)  L.pop()  print(L)
[1, 2, 5, 88, 6, 7]  [1, 2, 5, 88, 6]

tuple

创建 tuple 的时候,需要使用 () 来创建,但是 () 本身也是运算符,所以在创建包含一个元素的 tuple 时候,不能简单的使用 t = (1) 这种方案,而是应该使用 t = (1,) 这种形式来创建。

set

set 持有一系列没有重复的元素,而且是无序的,就像是 dict 的 key 一样。 set 的创建方式是调用 set() 并向其中传一个个 list

小测试的思考

针对下面的set,给定一个list,对list中的每一个元素,如果在set中,就将其删除,如果不在set中,就添加进去。

s = set([‘Adam’, ‘Lisa’, ‘Paul’])

L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]

s = set(['Adam', 'Lisa', 'Paul'])  L = ['Adam', 'Lisa', 'Bart', 'Paul']  for x in L:      if x in s:          s.remove(x)      else:          s.add(x)  print(s)
set(['Bart'])

思考:如果我们认为 s 和 L 是两个同类型的集合,最后做的操作就是找到 仅存在于 L 或者是 仅存在于 s 中的数据。也就是两个集合的差集的合集。

s = set(['Adam', 'Lisa', 'Paul'])  L = ['Adam', 'Lisa', 'Bart', 'Paul']  m = set(L)  a = s - m  b = m - s  c = a | b  print(c)
set(['Bart'])

这里需要补充一下,对于 set ,a & b 是指的 a 和 b 的交集,a | b 指的 ab 的合集,a – b 和 b – a 都是指的差集,如果是 a – b 则指的是在 a 中存在,但是在 b 中不存在的数据。

递归思想

汉诺塔 (http://baike.baidu.com/view/191666.htm) 的移动也可以看做是递归函数。

我们对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为:

如果a只有一个圆盘,可以直接移动到c;

如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。

请编写一个函数,给定输入 n, a, b, c,打印出移动的步骤:

move(n, a, b, c)

例如,输入 move(2, ‘A’, ‘B’, ‘C’),打印出:

A –> B A –> C B –> C

#-*- coding:utf-8 -*-  # a借b,移c  def move(n, a, b, c):      if n == 1:          print a, '-->', c          return      # a 借 c 移到 b      move(n-1, a,c,b)      # 最后一个移动到 c      print a, '-->', c      # b 借 a 移动到 c      move(n-1, b,a,c)    move(4, 'A', 'B', 'C')
A --> B  A --> C  B --> C  A --> B  C --> A  C --> B  A --> B  A --> C  B --> C  B --> A  C --> A  B --> C  A --> B  A --> C  B --> C

递归思想是非常重要的一种编程思想,在实现过程中,将一个过程拆分成单独的一步,将其中想同的点设计成递归循环,将不同的设计成不同的分支判断,经过这个测试,我的递归思想非常的弱,希望可以着重的做一些递归实现的问题,用来提高自己的代码水平。

默认参数

默认参数的使用是为了简化函数的调用,可以将常用的数据做为默认值,同时又可以在需要的时候,用传入的参数覆盖掉默认值。

由于参数的顺序要按从左到右的顺序读,所以默认值只能定义在必须的参数右面。

可变参数

Python 可以支持接受任意个参数的数量,传入的时候使用 def f(*args): ,这样可以在传入之后,当做一个 tuple 去处理变量。

迭代

Python 的迭代可以用在任何可以迭代的内容上,包括 list ,tuple,等。迭代永远取出元素本身,而不是元素的索引。

如果想取出元素的索引,可以使用 enumerate() 函数,例如:

L = ['Adam', 'Lisa', 'Bart', 'Paul']  for index , value in enumerate(L):      print index , '-', value
0 - Adam  1 - Lisa  2 - Bart  3 - Paul

迭代 dict 中的值

在 Python 中,迭代 dict 时默认迭代的是其中的 Key 的值,当我们需要使用对应的 value 的值的时候,可以使用 dict.values() 的方法获取所有的 value 值,也可以使用 dict.itervalues() 方法来迭代。

同样在迭代所有元素的时候,希望可以迭代整个对象,可以使用 items() 方法或者使用 iteritems() 方法来获取对象。

条件过滤

[x.upper() for x in L if isinstance(x, str)] 是用来判断每个在 L 中的内容是否是字符串。

利用这种方式,可以将许多方法简化成一个表达式。 其中 ininstance(x,str) 方法可以判断变量 x 是否是字符串。