每天10分钟,带你一周精通Python:第7章函数和模块

每天10分钟,带你一周精通Python:第7章函数和模块

在前几章,我们简单提到了函数和模块。在本章中,让我们详细学习一下它们。再次重申,所有的编程语言都有内建的代码,我们可以使用它们让我们的生活更加轻松。这些代码包含了预先写好的类、变量和函数,它们可以完成某种常见的任务,并保存在被称作模块的文件中。让我们先来了解一下函数。

7.1 什么是函数?

函数是预先写好的可以完成特定任务的代码。作为一个类比,你可以想象一下MS Excel中的可用的数学函数。为了把数字加起来,我们可以使用sum0函数,并输入sum(A1:A5),而不是输入A1+A2+A3+A4+A5。

依据函数的写法,是否是一个类的一部分(类是面向对象编程中的一个概念,在本书中我们不会涉及它),以及你如何引入它,我们可以简单地输入函数的名字或者使用点标记来调用函数。有些函数需要我们传入函数需要的数据来完成任务。这些数据叫作参数,我们通过把它们的值放入括号中,并以逗号分隔开,来把它们传入到函数中。

比如,为了在屏幕上显示文字,我们使用print(函数,我们通过输入print(“Hello World”)来调用它,其中print是函数的名字,“Hello World”是参数。

另一方面,为了操作文本字符串,可以使用replace()函数,我们需要输入"Hello World".replace(“World”,“Universe”),其中replace是函数的名字,而“Universe”是参数。点号前面的字符串,即“Hello World”,是将被替换的字符串。因此,“HelloWorld”将会被修改为“Hello Universe”。

7.2 定义函数

在Python中我们可以定义自己的函数,并在程序中重复使用它们。定义一个函数的语法如下所示。

def functionName(parameters):
    code detailing what the function
should do
    return [expression]

其中有两个关键字,def和return。

def告诉程序下一行开始的缩进的代码是函数的一部分。return是我们从函数返回一个结果的关键字。在函数中可以有不只一个的return语句。然而,一旦函数执行了一个returm语句,函数就结束了。如果你的函数不需要返回值,你就可以忽略return语句。另一种方式是你可以写return或者return None。

现在让我们定义第一个函数。假设我们想要确定一个输入的数字是不是素数。下面是我们将如何使用在第3章中学到的取余符号(%)和在第6章学到的fon循环和if语句来定义这个函数。

def checkIfPrime (numberToCheck):
    for x in range(2, numberToCheck):
        if (numberToCheckx == 0):
            return False
    return True

在上面的函数中,第2行和第3行使用一个for循环来把输入的参数numberToCheck用从2到numberToCheck-1间的所有数字相除,来确定余数是否是零。如果余数是零,numberToCheck就不是一个素数。第4行将会返回False,函数会结束退出。

如果在for循环中迭代到最后的一个数,所有的除法都没有得到余数零,函数将会执行到第5行,并返回True。接着函数将会结束退出。

为了使用这个函数,我们可以输入checklfPrime(13),并把它像这样分配给一个变量:

answer = checkIfPrime(13)

其中我们传入的参数值是13。接着我们可以通过输入print(answer)来打印出结果。我们将会得到输出:True。

7.3 变量作用域

当定义一个函数时,一个很重要的需要理解的概念是变量的作用域。函数内部定义的变量和外部定义的变量有不同的作用域。它们主要有两个不同点。

  • 第一点,在一个函数内定义的任何变量仅在函数内可访问。这些变量叫作局部变量。在函数外定义的任何变量叫作全局变量,可以在程序中的任何位置访问。

为了理解这个概念,可以尝试下面的代码。

messagel="Global Variablen"
def myFunction():
    print("\nINSIDE THE FUNCTION")
    #在函数内可以访问全局变量
inside a function
    print (message1)
    #声明一个局部变量
   message2 ="Local Variable"
   print (message2)
   
#调用函数
myFunction()

print("\nOUTSIDE THE FUNCTION")

#外部函数可以访问全局变量
function
print (message1)

#在函数外无法访问局部变量
function.
print (message2)

如果运行这个程序,你将会得到下面的输出。

INSIDE THE FUNCTION
Global Variable
Local Variable

OUTSIDE THE FUNCTION
Global Variable
NameError: name ‘message2’ is not defined

在函数内,无论局部变量,还是全局变量,都是可以访问的。在函数外部,局部变量message2就不能访问了。当我们在函数外部想要访问它时,就会得到一个NameError错误。

  • 第二个关于变量作用域需要理解的概念是,如果一个局部变量和一个全局变量具有相同的名字,函数内部的所有代码都将访问这个局部变量,而所有外部的代码都将访问全局变量。尝试运行下面的代码。
message1 ="Global Variable (shares same
name as a local variable)"

def myFunction():
    message1 = "Local Variable (shares
same name as a global variable)"
    print("\nINSIDE THE FUNCTION")
    print (message1)
    
#调用函数
myFunction ()
# 在函数外面打印 message1
print ("\nOUTSIDE THE FUNCTION")
print (message1)

你将会得到下面的输出结果。

INSIDE THE FUNCTION
Local Variable (shares same name as a
global variable)

OUTSIDE THE FUNCTION
Global Variable (shares same name as a
local variable)

当我们在函数内部打印message1时,它会打印“Local Variables(shares same name as a global variable)”,因为它打印的是一个局部变量。

当我们在函数外部打印它时,它访问的将是全局变量,因此打印出来的是 “Global Variable (shares same name as a local variable)”。

7.4 引入模块

Python有大量的内建函数。这些函数被保存在被称作模块的文件中。为了使用Python模块中的内建代码,我们需要先在程序中引入它们。我们通过使用import关键字来达到这个目的。一共有三种方法可以实现。

  • 第一种方法是通过使用importmodulename把整个模块都引入到程序中。

比如,为了引入random模块,我们可以这么写import random。

  • 为了使用random模块中的randrange0函数,我们可以这么写random. randrange(1, 10)。

如果觉得每次使用函数时都要写random很麻烦,你可以通过使用import random as r(其中r可以是你选择的任何名字)来引入模块到程序中。现在要使用randrange)函数,你仅需要简单地通过使用r.randrange(1,10)即可。

  • 第三种引入模块的方法是从模块中引入特定的函数,可以这么写from moduleName import name1[,name2[,…nameN]]。

比如,从random模块中引入randrange()函数,我们可以这么写from random import randrange。如果想要引入多个函数,我们可以把它们用逗号分开。要引入randrange()和randint()函数,我们可以这么写from random import randrange,randint。现在要使用引入的函数,我们就再也不需要使用点号,仅仅写randrange(1,10)就可以了。

7.5 创建模块

除了引入内建的模块,我们也可以创建我们自己的模块。如果你有一些函数想在将来的程序项目中重复使用,这么做就非常有用了。

创建一个模块非常简单,仅需要把文件以.py的扩展名保存,并把它放到你想要从中引入的Python文件的同一个文件夹中即可

假设你想要使用前面所讲的在另一个Python脚本中定义的checklfPrime()函数。下面就是你这么做的方法。首先把上面的代码保存为prime.py并放到桌面上。prime.py应该包含下面的代码。

def checkIfPrime (numberToCheck):
    for x in range(2, numberToCheck):
        if (numberToCheckx == 0):
            return False
    return True

接下来,创建另一个Python文件,并将其命名为useChecklfPrime.py。把它也保存在桌面上。useChecklfPrime.py应该包含下面的代码。

import prime
answer = prime.checkIfPrime(13)
print (answer)

现在运行useChecklfPrime.py。你应该得到输出结果True。就是如此简单。

然而,假设你想要保存prime.py和useChecklfPrime.py到不同的文件夹中。你将需要在useCheckfPrime py中添加一些代码,告诉Python解释器到哪里找到这个模块。

假设你在C盘里创建了一个叫作‘MyPythonModules’的文件夹保存prime.py。你需要在useChecklfPrime.py文件的顶部添加下面的代码(在import prime这行的前面)。

import sys

if 'C:\\MyPythonModules' not in sys.path:
    sys.path.append('C:\\MyPythonModules')

sys.path表示的是Python的系统路径。它是一个文件夹的列表,Python会在这些文件夹中搜索模块和文件。上面的代码在你的系统路径中添加了文件夹 ‘C:MyPythonModules’。

现在你可以把prime.py放入到C:MyPythonModules文件夹中,把checklfPrime.py放到你希望的任意文件夹中。
在这里插入图片描述

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值