python学习笔记(二)

一般来说,我们总是希望避免复制代码,因为一旦决定要更新代码,就必须要修改所有复制的代码。随着获得更多的编程经验,常常会发现在为代码“消除重复”。消除重复能够使程序更短、更易读、更容易更新。

函数

def语句和参数

def hello(name):
 print('Hello ' + name)


hello('Alice')
hello('Bob')
输出:
Hello Alice
Hello Bob

 return 和 返回值

可以将返回值作为参数传递给另一个函数调用。

所有函数调用都需要求值为一个返回值。对于所有没有 return 语句的函数定义, Python 都会在末尾加上 return None。

None

None 是 NoneType 数据类型的唯一值,None 必须大写首字母 N。

关键字参数和print()

局部和全局作用域

在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。在所有函数之外赋值的变量,属于“全局作用域”。处于局部作用域的变量,被称为“局部变量”。处于全局作用域的变量,被称为“全局变量”。一个变量必是其中一种,不能既是局部的又是全的。

作用域很重要,理由如下:

  1.  全局作用域中的代码不能使用任何局部变量;
  2.  但是,局部作用域可以访问全局变量;
  3.  一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。
  4.  如果在不同的作用域中,可以用相同的名字命名不同的变量。

虽然在小程序中使用全局变量没有太大问题,但当程序变得越来越大时, 依赖全局变量就是一个坏习惯。
 

                              函数作为“黑盒”
通常,对于一个函数,你要知道的就是它的输入值(变元)和输出值。并非总是需要弄清楚函数的代码实际是怎样工作的。如果以这种高层的方式来思考函数,通常大家会说,你将该函数看成是一个黑盒。

列表

spam=['cat', 'bat', 'rat', 'elephant']

负数下标:spam[-1]='elephant'

利用切片获取子列表:

spam[2]是一个列表和下标(一个整数)。 

spam[1:4]是一个列表和切片(两个整数)
在一个切片中,第一个整数是切片开始处的下标。第二个整数是切片结束处的下标。切片向上增长,直至第二个下标的值,但不包括它。

spam[:]省略第一个下标相当于使用 0, 或列表的开始。省略第二个下标相当于使用列表的长度, 意味着分片直至列表的末尾。

len()获取列表长度 

del从列表中删除值

使用列表的好处在于,现在数据放在一个结构中,所以程序能够更灵活的处理数据,比放在一些重复的变量中方便。
in 和 not in 操作符

>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> 'cat' in spam
False
>>> 'howdy' not in spam
False

多重赋值技巧

>>> cat = ['fat', 'black', 'loud']
>>> size, color, disposition = cat
变量的数目和列表的长度必须严格相等, 否则 Python 将给出 ValueError:
>>> cat = ['fat', 'black', 'loud']
>>> size, color, disposition, name = cat
Traceback (most recent call last):
File "<pyshell#84>", line 1, in <module>
size, color, disposition, name = cat
ValueError: need more than 3 values to unpack

方法

用 index()方法在列表中查找值
 

>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> spam.index('hello')
0
>>> spam.index('heyas')
3

用 append()和 insert()方法在列表中添加值
用 remove()方法从列表中删除值
用 sort()方法将列表中的值排序
 

>>> spam = ['ants', 'cats', 'dogs', 'badgers', 'elephants']
>>> spam.sort()
>>> spam
['ants', 'badgers', 'cats', 'dogs', 'elephants']

Python 中缩进规则的例外
在大多数情况下, 代码行的缩进告诉 Python 它属于哪一个代码块。但是,
这个规则有几个例外。例如在源代码文件中, 列表实际上可以跨越几行。这些行
的缩进并不重要。 Python 知道, 没有看到结束方括号, 列表就没有结束。例如,
代码可以看起来像这样:
spam = ['apples',
'oranges',
'bananas',
'cats']
print(spam)
当然, 从实践的角度来说, 大部分人会利用 Python 的行为, 让他们的列表
看起来漂亮且可读, 就像神奇 8 球程序中的消息列表一样。
也可以在行末使用续行字符\, 将一条指令写成多行。可以把\看成是“ 这条
指令在下一行继续”。 \续行字符之后的一行中,缩进并不重要。例如, 下面是有
效的 Python 代码:
print('Four score and seven ' + \
'years ago...')
如果希望将一长行的 Python 代码安排得更为可读,这些技巧是有用的。
 

 元组数据类型

除了两个方面,“元组”数据类型几乎与列表数据类型一样。首先,元组输入时用圆括号(), 而不是用方括号[]。

但元组与列表的主要区别还在于,元组像字符串一样,是不可变的。 元组不能让它们的值被修改、添加或删除。
如果元组中只有一个值,可在括号内该值的后面跟上一个逗号, 表明这种情况。 否则, Python 将认为, 你只是在一个普通括号内输入了一个值。逗号告诉Python, 这是一个元组( 不像其他编程语言, Python 接受列表或元组中最后表项后面跟的逗号)。
 

>>> type(('hello',))
<class 'tuple'>
>>> type(('hello'))
<class 'str

你可以用元组告诉所有读代码的人,你不打算改变这个序列的值。如果需要一个永远不会改变的值的序列,就使用元组。使用元组而不是列表的第二个好处在于,因为它们是不可变的,它们的内容不会变化。
用 list()和 tuple()函数来转换类型
函数 list()和 tuple()将返回传递给它们的值的列表和元组版本。
 

>>> tuple(['cat', 'dog', 5])
('cat', 'dog', 5)
>>> list(('cat', 'dog', 5))
['cat', 'dog', 5]
>>> list('hello')
['h', 'e', 'l', 'l', 'o']

copy 模块的 copy()和 deepcopy()函数
如果函数修改了传入的列表或字典,你不希望这些变动影响原来的列表或字典。Python 提供了名为 copy 的模块, 其中包含 copy()和 deepcopy()函数。第一个函数copy.copy(), 可以用来复制列表或字典这样的可变值, 而不只是复制引用。如果要复制的列表中包含了列表, 那就使用 copy.deepcopy()函数来代替。
 

>>> import copy
>>> spam = ['A', 'B', 'C', 'D']
>>> cheese = copy.copy(spam)
>>> cheese[1] = 42
>>> spam
['A', 'B', 'C', 'D']
>>> cheese
['A', 42, 'C', 'D']

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值