python远古笔记

函数

使用关键字def来告诉Python你要定义一个 函数,在这里,函数名为greet_user(),它不需要任何信息就能完成其工作,因此括号是空的(即便如此,括号也必不可少)。最后,定义以冒号结尾。

1
def greet_user():

可混合使用位置实参、关键字实参和默认值

  • 如使用 title() 将example转换为 首字母大写格式
    1
    example.title():

有时候,需要让实参变成可选的,这样使用函数的人就只需在必要时才提供额外的信息。可 使用默认值来让实参变成可选的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def get_formatted_name(first_name, last_name, middle_name=''):
"""返回整洁的姓名"""
if middle_name:
full_name = first_name + ' ' + middle_name + ' ' + last_name

else:
full_name = first_name + ' ' + last_name

return full_name.title()


musician = get_formatted_name('jimi', 'hendrix')
print(musician)

musician = get_formatted_name('john', 'hooker', 'lee')
print(musician)


向函数传递列表:

1
2
3
4
5
6
7
8
9
10
def greet_users(names):
"""向列表中的每位用户都发出简单的问候"""
for name in names:
msg = "Hello, " + name.title() + "!"
print(msg)


usernames = ['hannah', 'ty', 'margot']
greet_users(usernames)


函数列表示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def print_models(unprinted_designs, completed_models): 
"""模拟打印每个设计,直到没有未打印的设计为止 打印每个设计后,都将其移到列表completed_models中"""
while unprinted_designs:
current_design = unprinted_designs.pop()
#模拟根据设计制作3D打印模型的过程
print("Printing model: " + current_design)
completed_models.append(current_design)


def show_completed_models(completed_models):
"""显示打印好的所有模型"""
print("\nThe following models have been printed:")
for completed_model in completed_models:
print(completed_model)


unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']
completed_models = []

print_models(unprinted_designs, completed_models)
show_completed_models(completed_models)


禁止函数修改列表
要将列表的副本传递给函数,可以像下面这样做:

1
function_name(list_name[:])
  • 切片表示法[:]创建列表的副本

有时候,你预先不知道函数需要接受多少个实参,好在Python允许函数从调用语句中收集任意数量的实参
形参名 *toppings 中的星号让Python创建一个名为toppings的空元组,并将收到的所有值都封 装到这个元组中

使用任意数量的关键字实参

1
2
3
4
5
6
7
8
9
10
def build_profile(first, last, **user_info):
profile = {}
……
for key, value in user_info.items():
profile[key] = value
return profile


user_profile = build_profile('albert', 'einstein', location='princeton', field='physics')

形参 **user_info 中的两个星号让Python创建一个名为user_info的空字典,并将收到的所 有名称—值对都封装到这个字典中。在这个函数中,可以像访问其他字典那样访问user_info中的 名称—值对


导入整个模块
要让函数是可导入的,得先创建模块
pizza.py(模块名是文件名):

1
2
3
4
5
6
7
def make_pizza(size, *toppings):
"""概述要制作的比萨"""
print("\nMaking a " + str(size) +"-inch pizza with the following toppings:")

for topping in toppings:
print("- " + topping)

我们在pizza.py所在的目录中创建另一个名为making_pizzas.py的文件,这个文件导入刚创建的模块,再调用make_pizza()两次:
making_pizzas.py:

1
2
3
4
import pizza
pizza.make_pizza(16, 'pepperoni')
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

Python读取这个文件时,代码行import pizza让Python打开文件pizza.py,并将其中的所有函数都复制到这个程序中
要调用被导入的模块中的函数,可指定导入的模块的名称pizza和函数名make_pizza(),并用句点分隔它们

你还可以导入模块中的特定函数,这种导入方法的语法如下:

1
from module_name import function_name

或使用 as 给函数/模块指定别名

1
from pizza import make_pizza as mp
1
import pizza as p

导入模块中的所有函数
使用星号(*)运算符可让Python导入模块中的所有函数

1
from pizza import *

列表

  1. 在列表末尾添加元素:
    1
    motorcycles.append('ducati')
    方法append()将元素’ducati’添加到了列表末尾
  2. 在列表中插入元素:
    1
    motorcycles.insert(0, 'ducati')	
    使用方法insert()可在列表的任何位置添加新元素这种操作将列表中既有的每个元素都右移一个位置
  3. 使用del语句删除元素:
    1
    del motorcycles[0] 
    已知位置[0]
  4. 使用方法pop()删除元素:
    1
    motorcycles.pop()
    方法pop()可删除列表末尾的元素,并让你能够接着使用它。实际上,你可以使用pop()来删除列表中任何位置的元素,只需在括号中指定要删除的元素 的索引即可:motorcycles.pop(0)
  5. 根据值删除元素 如果你只知道要删除的元素的值,可使用方法remove()
    1
    motorcycles.remove('ducati')
    让Python确定’ducati’出现在列表的什么地方,并将该元素删除,方法remove()只删除第一个指定的值。
  6. 使用方法 sort()对列表进行永久性排序
    方法sort()永久性地修改了列表元素的排列顺序按字母顺序。你还可以按与字母顺序相反的顺序排列列表元素,只需向sort()方法传递参数 reverse=True。XXX.sort(reverse=True)
  7. 使用函数 sorted()对列表进行临时排序
    要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数sorted()。
    函数 sorted()让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。
    1
    2
    3
    print("Here is the original list:") print(cars)
    print("\nHere is the sorted list:") print(sorted(cars))
    print("\nHere is the original list again:") print(cars)
  8. 倒着打印列表可使用方法reverse()。
    注意,reverse()不是指按与字母顺序相反的顺序排列列表元素,而只是反转列表元素的排列顺序
  9. 确定列表的长度
    使用函数len()可快速获悉列表的长度
  10. 当需要访问最后一个列表元素时,都可使用索引-1。
    1
    print(motorcycles[-1])
  11. 遍历整个列表
    1
    2
    for magician in magicians:
    print(magician)
    第一行代码让Python获取列表magicians中的第一个值(’alice’),并将其存储到变量magician 中。
  12. 使用函数 range()使用函数 range()来打印一系列的数字:
    1
    2
    for value in range(1,5): 
    print(value)
    上述代码好像应该打印数字1~5,但实际上它不会打印数字5
    range()让Python从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为5)。
  13. 使用 range()创建数字列表
    使用函数range()时,还可指定步长。
    例如,下面的代码打印1~10内的偶数:
    1
    2
    even_numbers = list(range(2,11,2)) 
    print(even_numbers)
    在这个示例中,函数range()从2开始数,然后不断地加2,直到达到或超过终值因此输出如下[2, 4, 6, 8, 10]
  14. 在Python中,两个星号(**)表示乘方运算。下面的代码演示了 如何将前10个整数的平方加入到一个列表中
    1
    2
    3
    4
    5
    squares = [] 
    for value in range(1,11):
    square = value**2
    squares.append(square)
    print(squares)
  15. 对数字列表执行简单的统计计算
    你可以轻松地找出数字列表的最大值、 最小值和总和:
    1
    2
    3
    4
    5
    6
    7
    >>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 
    >>> min(digits)
    0
    >>> max(digits)
    9
    >>> sum(digits)
    45
  16. 列表解析
    前面介绍的生成列表squares的方式包含三四行代码,而列表解析让你只需编写一行代码就 能生成这样的列表。
    1
    2
    squares = [value**2 for value in range(1,11)]
    print(squares)
  17. 切片使用列表的一部分
    1
    2
    players = ['charles', 'martina', 'michael', 'florence', 'eli'] 
    print(players[0:3])
    代码打印该列表的一个切片,其中只包含三名队员。输出也是一个列表,其中包含前三名队员
    你可以生成列表的任何子集,例如如果你要提取列表的第2~4个元素,可将起始索引指定 为1,并将终止索引指定为4
    print(players[1:4])

没有指定起始索引,Python从列表开头开始提取
print(players[:4])

Python将返回从第3个元素到列表末尾的所有元素
print(players[2:])

打印最后三名队员的名字,即便队员名单的长度发生变化,也依然如此
print(players[-3:])
18. 遍历切片
可在for循环中使用切片
for player in players[:3]
代码没有遍历整个队员列表,而只遍历前三名队员
19. 复制列表
你经常需要根据既有列表创建全新的列表。下面来介绍复制列表的工作原理,以及复制列表 可提供极大帮助的一种情形。 要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])

1
2
friend_foods = my_foods[:] #正确
friend_foods = my_foods #错误
  1. 定义元组
    元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。 例如如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它们是不能修改的:
    1
    2
    3
    dimensions = (200, 50) 
    print(dimensions[0])
    print(dimensions[1])
  2. 虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dimensions = (200, 50) 
    print("Original dimensions:")
    for dimension in dimensions:
    print(dimension)

    dimensions = (400, 100)
    print("\nModified dimensions:")
    for dimension in dimensions:
    print(dimension)
    我们首先定义了一个元组,并将其存储的尺寸打印了出来;接下来,将一个新元组 存储到变量dimensions中;然后,打印新的尺寸。这次,Python不会报告任何错 误,因为给元组变量赋值是合法的:
  3. python中创建二维列表
    创建方法:
  • 直接创建:
    1
    2
    3
    a=[[0,0,0],[0,0,0],[0,0,0]]
    a[0][0]=1
    print(a)
    输出结果:[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
    2、列表生成法
    1
    2
    3
    #4列 2行
    a=[[0]*4 for i in range(2)]
    print(a)
    输出结果:[[0, 0, 0, 0], [0, 0, 0, 0]]
    3、使用numpy库
    1
    2
    3
    import numpy
    a=numpy.zeros((2,4))
    print(a)
    输出结果:
    [[0. 0. 0. 0.]
    [0. 0. 0. 0.]]
---------------THEEND---------------