Python 快速入门系列(二)

本文讲解如何使用 Python字典,将不同的信息关联起来。与列表一样,你也可以根据需要在字典中存储任意数量的信息。你还将学习 while 循环,它不断地运行代码块,直到指定的条件不再满足为止。后面还介绍函数是执行特定任务的被命名的代码块,你可以根据需要随时运行它。下面来个快速总结。

字典

在Python中,字典是一系列键-值对。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。

字典的增删改查

在Python中,字典用放在花括号{}中的一系列键-值对表示。

user = {'name':'minger', 'sex':'male', 'age':18}
print(user)

在这里插入图片描述

访问字典中的值

要获取与键相关联的值,可依次指定字典名和放在方括号内的键。

user = {'name':'minger', 'sex':'male', 'age':18}
print(user)
print(user['name'])
print(user['age'])

在这里插入图片描述

添加键值对

字典是一种动态结构,可随时在其中添加键—值对。

user = {'name':'minger', 'sex':'male', 'age':18}
print(user)
print(user['name'])
print(user['age'])

user['city']='beijing'
print(user)

Python 快速入门系列(二)_第1张图片

修改字典中的值

要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。

cat = {}
cat['color'] = 'bule'
cat['age'] = 15
print(cat)
cat['age'] = 18
print(cat)

在这里插入图片描述

删除键值对

对于字典中不再需要的信息,可使用del语句将相应的键—值对彻底删除。使用del语句时,必须指定字典名和要删除的键。

cat = {}
cat['color'] = 'bule'
cat['age'] = 15
print(cat)
cat['age'] = 18
print(cat)

#删除键值对
del cat['color']
print(cat)

在这里插入图片描述

遍历字典

一个Python字典可能只包含几个键—值对,也可能包含数百万个键—值对。鉴于字典可能包含大量的数据,Python支持对字典遍历。字典可用于以各种方式存储信息,因此有多种 遍历字典的方式:可遍历字典的所有键—值对、键或值。

遍历所有的键一值对

user_0 = { 'username': 'efermi', 'first': 'enrico', 'last': 'fermi', }
for key, value in user_0.items():
    print("\nKey: " + key)
    print("Value: " + value)

Python 快速入门系列(二)_第2张图片

通过 for k,v in user_0.items() 的方式遍历所有的键值对,k 代表键,v 代表值。

注意:即便遍历字典时,键—值对的返回顺序也与存储顺序不同。Python不关心键—值对的存储顺序,而只跟踪键和值之间的关联关系。

遍历所有键 keys()

如果不需要用值,可以用 keys() 遍历出所有的键。

favorite_languages = { 
    'jen': 'python', 
    'sarah': 'c', 
    'edward': 'ruby', 
    'phil': 'python', 
} 

for name in favorite_languages.keys():
    print(name.title())

在这里插入图片描述
上面的例子打印出了 cat 的所有键,用字符串的 title() 方法使每个单词的首字母大写。

遍历字典时会默认遍历所有的键,for name in favorite_languages.keys() 和 for name in favorite_languages.keys()的效果一样。

按顺序遍历字典中的所有键

字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。这不是问题,因为通常你想要的只是获取与键相关联的正确的值。 要以特定的顺序返回元素,一种办法是在for 循环中对返回的键进行排序。为此,可使用函数sorted() 来获得按特定顺序排列的键列表的副本:

favorite_languages = { 
    'jen': 'python', 
    'sarah': 'c', 
    'edward': 'ruby',
     'phil': 'python', 
} 
for name in sorted(favorite_languages.keys()):
    print(name.title() + ", thank you for taking the poll.")

这条for 语句类似于其他for 语句,但对方法dictionary.keys() 的结果调用了函数sorted() 。这让Python列出字典中的所有键,并在遍历前对这个列表进行排序。输出 表明,按顺序显示了所有被调查者的名字:
在这里插入图片描述

遍历所有值 values()

favorite_languages = { 
    'jen': 'python', 
    'sarah': 'c', 
    'edward': 'ruby',
     'phil': 'python', 
} 

print("The following languages have been mentioned:") 
for language in favorite_languages.values():
    print(language.title())

这条for 语句提取字典中的每个值,并将它们依次存储到变量language 中。通过打印这些值,就获得了一个列表,其中包含被调查者选择的各种语言:
Python 快速入门系列(二)_第3张图片

这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集 合(set)。集集合合 类似于列表,但每个元素都必须是独一无二的:

favorite_languages = { 
    'jen': 'python', 
    'sarah': 'c', 
    'edward': 'ruby',
     'phil': 'python', 
} 

print("The following languages have been mentioned:") 
for language in set(favorite_languages.values()):
    print(language.title())

在这里插入图片描述

用户输入和while循环

用户输入

函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在一个变量中,以方便你使用。

message = input("Tell me something, and I will repeat it back to you: ")
print(message)

在这里插入图片描述

如果你使用的是Python 2.7,应使用函数raw_input()来提示用户输入。这个函数与Python 3中的input()一样,也将输入解读为字符串。

Python 2.7也包含函数input(),但它将用户输入解读为Python代码,并尝试运行它们。如果你使用的是Python 2.7,请使用raw_input()而不是input()来获取输入。
如果想将输入的内容转换为数字,可以用 int() 来转换。

while 循环

for循环用于针对集合中的每个元素都一个代码块,而while循环不断地运行,直到指定的条件不满足为止。

current_number = 1 
while current_number <= 5:
    print(current_number)
    current_number += 1

Python 快速入门系列(二)_第4张图片
break

要立即退出while循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用break语句。break语句用于控制程序流程,可使用它来控制哪些代码行将执行,哪些代码行不执行,从而让程序按你的要求执行你要执行的代码。

continue

要返回到循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句,它不像 break 语句那样不再执行余下的代码并退出整个循环。

函数

Python 用关键字 def 来定义函数,函数名以冒号 : 结尾,冒号之后的缩进里的内容都是函数体。

def greet_user():
    """显示简单的问候语"""
    print("Hello!")
    
greet_user()

在这里插入图片描述

函数参数

可以向函数传递参数。下面的例子向函数 greet_user() 传递了个参数 name。其中 name 是形参,Minger是实参。

def greet_user(name):
    print('Hello,' + name)

greet_user('Minger')

在这里插入图片描述

向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同;也可使用关键字实参,其 中每个实参都由变量名和值组成;还可使用列表和字典。

位置实参

你调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参 。

def describe_pet(animal_type, pet_name):
    """显示宠物的信息"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet('hamster', 'harry')

在这里插入图片描述

按照形参定义的顺序传递的实参就称为位置实参。

关键字实参

关键字实参是传递给函数的名称—值对。关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。

def describe_pet(animal_type, pet_name):
    """显示宠物的信息"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet(animal_type='hamster', pet_name='harry')

在这里插入图片描述

接着位置实参中的例子,describe_pet(animal_type, pet_name)方法第一个参数是 animal_type,第二个参数是 pet_name。我们用关键字实参指明传递的是哪一个,即使顺序写乱了得到的结果也不会乱。

默认值

编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。因此,给形参指定默认值后,可在函数调用中省略相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法。

def describe_pet(pet_name, animal_type='dog'): 
    """显示宠物的信息"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet(pet_name='willie')

在这里插入图片描述

返回字典

函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值。函数返回的值被称为返返回回值值 。在函数中,可使用return 语句将值返回到调用函数的代码行。 返回值让你能够将程序的大部分繁重工作移到函数中去完成,从而简化主程序。

def get_formatted_name(first_name, last_name):
    """返回整洁的姓名"""
    full_name = first_name + ' ' + last_name
    return full_name.title()

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

在这里插入图片描述

传递任意数量的实参

有时候,你预先不知道函数需要接受多少个实参,好在Python允许函数从调用语句中收集任意数量的实参。

def person(*args):
    print(args)

person('name','age','address')

在这里插入图片描述

上面定义了一个函数 person() ,只有一个形参 *args 。形参名 *args 中的星号让 Python 创建一个名为 args 的空元组,并将收到的所有值都封装到这个元组中。

结合使用位置实参和任意数量实参

如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python 先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。

def person(city, *args):
    print('city: ' + city + ', other args:')
    for value in args:
        print(value)

person('beijing', 'name', 'age', 'tel')

Python 快速入门系列(二)_第5张图片

函数 person() 有两个形参,第一个 city 是普通的位置实参,第二个 *args 是可变参数。

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

有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息。在这种情况下,可将函数编写成能够接受任意数量的键—值对——调用语句提供了多少就接受多少。一个这样的示例是创建用户简介:你知道你将收到有关用户的信息,但不确定会是什么样的信息。

def build_profile(first, last, **user_info):
	profile = {}
	profile['first_name'] = first
	profile['last_name'] = last

	for key,value in user_info.items():
		profile[key] = value

	return profile

user = build_profile('steven', 'bob', city='beijing', age=18)

print(user)

执行代码,输出结果是:
在这里插入图片描述

导入导出

可以将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。

导入整个模块

要让函数是可导入的,得先创建模块。模模块块 是扩展名为.py的文件,包含要导入到程序中的代码。下面来创建一个包含函数make_pizza() 的模块。为此,我们将文件pizza.py中 除函数make_pizza() 之外的其他代码都删除:

pizza.py

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

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

Python读取这个文件时,代码行import pizza 让Python打开文件pizza.py,并将其中的所有函数都复制到这个程序中。你看不到复制的代码,因为这个程序运行时,Python在幕 后复制这些代码。你只需知道,在making_pizzas.py中,可以使用pizza.py中定义的所有函数。
Python 快速入门系列(二)_第6张图片
导入特定的函数

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

from module_name import function_name 

通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数:

from module_name import function_0, function_1, function_2 

上面的例子只导入 cat.py 中的 eat() 方法

from cat import eat

eat('fish')

得到相同的结果。

使用 as 给函数指定别名

如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短而独一无二的别名——函数的另一个名称,类似于外号。要给函数指定这种特殊外号,需要在导入它时这样做。

使用 as 给模块指定别名

你还可以给模块指定别名。通过给模块指定简短的别名(如给模块pizza 指定别名p ),让你能够更轻松地调用模块中的函数。相比于pizza.make_pizza() ,p.make_pizza() 更为简洁:

import pizza as p
p.make_pizza(16, 'pepperoni')
p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

导入模块中的所有函数

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

from pizza import *
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

函数编写指南

应给函数指定描述性名称
函数名应只包含小写字母和下划线
每个函数都应包含简要地阐述其功能的注释,该注释应紧跟在函数定义后面,并采用文档字符串格式。
给形参指定默认值时,等号两边不要有空格
如果程序或模块包含多个函数,可使用两个空行将相邻的函数分开,这样将更容易知道前一个函数在什么地方结束,下一个函数从什么地方开始。
所有的import语句都应放在文件开头,唯一例外的情形是,在文件开头使用了注释来描述整个程序。

总结

在本章中,简单描述:如何定义字典,以及如何使用存储在字典中的信息;如何遍历字典中所有的键-值对等。

还使用input() 来让用户提供信息;如何处理文本和数字输入,以及如何使用while 循环让程序按用户的要求不断地运行,结合使用while 循环和字典。

编写函数,以及如何传递实参,让函数能够访问完成其工作所需的信息。最后,学习了函数编写指南,遵循这些指南可让程序始终结构良好,并对你和其他人来说易于阅读。

参考:Python编程:从入门到实践

Python 快速入门系列(二)_第7张图片
欢迎关注公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:

Python 快速入门系列(二)_第8张图片

你可能感兴趣的:(Python)