python基础课程系列(八)

8.6.将函数存储在模块中
函数的优点之一是,使用它们可将代码块与主程序分离。通过给函数指定描述性名称,可让主程序容易理解得多。你还可以更进一步,将函数存储在被称为 模块 的独立文件中,
再将模块 导入 到主程序中。 import 语句允许在当前运行的程序文件中使用模块中的代码。

8.6.1.导入整个模块
要让函数是可导入的,得先创建模块。 模块 是扩展名为 .py 的文件,包含要导入到程序中的代码。
-------------------------------------------------------
>>> pizza.make_pizza(16, 'pepperoni')
Traceback (most recent call last):
  File "<pyshell#15>", line 1, in <module>
    pizza.make_pizza(16, 'pepperoni')
NameError: name 'pizza' is not defined

>>> import pizza
>>> pizza.make_pizza(16, 'pepperoni')

Making a 16-inch pizza with the following toppings:
- pepperoni
>>> pizza.make_pizza(12, 'mushrooms', 'green peppers')

Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
-------------------------------------------------------

8.6.2.导入特定的函数
你还可以导入模块中的特定函数
from module_name import function_name

from module_name import function_0, function_1, function_2
-------------------------------------------------------
>>> make_pizza(16, 'pepperoni')
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    make_pizza(16, 'pepperoni')
NameError: name 'make_pizza' is not defined

>>> from pizza import make_pizza
>>> make_pizza(16, 'pepperoni')

Making a 16-inch pizza with the following toppings:
- pepperoni
>>> make_pizza(12, 'mushrooms', 'green peppers')

Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
-------------------------------------------------------

8.6.3.使用 as 给函数指定别名
如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短而独一无二的 别名 —— 函数的另一个名称,类似于外号。要给函数指定这种特殊外
号,需要在导入它时这样做。
-------------------------------------------------------
>>> make_pizza(16, 'pepperoni')
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    make_pizza(16, 'pepperoni')
NameError: name 'make_pizza' is not defined

>>> from pizza import make_pizza as mp
>>> make_pizza(16, 'pepperoni')
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    make_pizza(16, 'pepperoni')
NameError: name 'make_pizza' is not defined

>>> mp(16, 'pepperoni')

Making a 16-inch pizza with the following toppings:
- pepperoni
>>> mp(12, 'mushrooms', 'green peppers')

Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
-------------------------------------------------------

8.6.4.使用 as 给模块指定别名
你还可以给模块指定别名。通过给模块指定简短的别名(如给模块 pizza 指定别名 p ),让你能够更轻松地调用模块中的函数
-------------------------------------------------------
>>> import pizza as p
>>> p.make_pizza(16, 'pepperoni')

Making a 16-inch pizza with the following toppings:
- pepperoni
>>> p.make_pizza(12, 'mushrooms', 'green peppers')

Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
-------------------------------------------------------

第9章 类
在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,你定义一大类对
象都有的通用行为。基于类创建 对象 时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。根据类来创建对象被称为 实例化 ,这让你能够使用类的实例

9.1.创建和使用类
9.1.1.创建 Dog  类
1.方法 __init__()
类中的函数称为方法,__init__() 是一个特殊的方法,每当你根据 Dog 类创建新实例时, Python 都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免 Python 默认方法与普通方法发生名称冲突。
我们将方法 __init__() 定义成了包含三个形参: self 、 name 和 age 。在这个方法的定义中,形参 self 必不可少,还必须位于其他形参的前面。
因为 Python 调用这个 __init__() 方法来创建 Dog 实例时,将自动传入实参 self 。每个与类相关联的方法调用都自动传递实参 self ,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
以 self 为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。 self.name = name 获取存储在形参 name 中的值,并将其存储到变量 name 中,然后该变量被关联到当前创建的实例。 self.age = age 的作用与此类似。像这样可通过实例访问的变量称为 属性
Dog 类还定义了另外两个方法: sit() 和 roll_over() 
-------------------------------------------------------
class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self, name, age):
        """初始化属性name和age"""
        self.name = name
        self.age = age

    def sit(self):
        """模拟小狗被命令时蹲下"""
        print(self.name.title() + ' is now sitting')

    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name.title() + ' rolled over!')

-------------------------------------------------------

9.1.2.根据类创建实例
可将类视为有关如何创建实例的说明。 Dog 类是一系列说明,让 Python 知道如何创建表示特定小狗的实例。
-------------------------------------------------------
>>> my_dog = Dog('willie', 6)
>>> print('My dog\'s name is ' + my_dog.name.title() + '.')
My dog's name is Willie.
>>> print('My dog is ' + str(my_dog.age) + ' years old.')
My dog is 6 years old.

这里使用的是前一个示例中编写的 Dog 类。 Python 使用实参 'willie' 和 6 调用 Dog 类中的方法 __init__() 。方法 __init__() 创建一个表示特定小狗的示例,并使用我们提供的值来设置属性 name 和 age 。方法 __init__() 并未显式地包含 return 语句,但 Python 自动返回一个表示这条小狗的实例。我们将这个实例存储在变量 my_dog 中。在这里,命名约定很有用:我们通常可以认为首字母大写的名称(如 Dog )指的是类,而小写的名称(如 my_dog )指的是根据类创建的实例。

1.访问属性
要访问实例的属性,可使用句点表示法。
>>> my_dog.name
'willie'
在这里, Python 先找到实例 my_dog ,再查找与这个实例相关联的属性 name 。再查找与这个实例相关联的属性 name 。在 Dog 类中引用这个属性时,使用的是 self.name 。

2.调用方法
>>> my_dog = Dog('willie', 6)

>>> my_dog.sit()
Willie is now sitting
>>> my_dog.roll_over()
Willie rolled over!

要调用方法,可指定实例的名称(这里是 my_dog )和要调用的方法,并用句点分隔它们。遇到代码 my_dog.sit() 时, Python 在类 Dog 中查找方法 sit() 并运行其代码。
Python 以同样的方式解读代码 my_dog.roll_over() 。

3.创建多个实例
可按需求根据类创建任意数量的实例。
-------------------------------------------------------
>>> my_dog = Dog('willie', 6)
>>> your_dog = Dog('lucy', 3)
>>> print('My dog\'s name is ' + my_dog.name.title() + '.')
My dog's name is Willie.
>>> print('My dog is ' + str(my_dog.age) + ' years old.')
My dog is 6 years old.
>>> print('Your dog\'s name is ' + your_dog.name.title() + '.')
Your dog's name is Lucy.
>>> print('Your dog is ' + str(your_dog.age) + ' years old.')
Your dog is 3 years old.
>>> my_dog.sit()
Willie is now sitting
>>> your_dog.sit()
Lucy is now sitting
-------------------------------------------------------
就算我们给第二条小狗指定同样的名字和年龄, Python 依然会根据 Dog 类创建另一个实例。你可按需求根据一个类创建任意数量的实例,条件是将每个实例都存储在不同的变量
中,或占用列表或字典的不同位置。
 

猜你喜欢

转载自blog.csdn.net/zhaocen_1230/article/details/81433829