Python函及模块的使用

目录
  • 1、函数的作用
  • 2、定义函数
  • 3、函数的参数
    • 3.1 参数的默认值
    • 3.2 可变参数
  • 4、用模块管理函数
    • 4.1 示例代码module.py
  • 5、变量的作用域

1、函数的作用

编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种! ”。

可以将重复的功能封装到一个称之为“函数”的功能模块中,用来实现单一,或相关联功能的代码段。

2、定义函数

定义函数的规则如下所示:

  • 函数代码块以 def 关键词开头,后接函数名和圆括号 () 。
  • 函数名命名规则跟变量的命名规则是一致
  • return关键字用于退出函数,选择性地向调用方返回一个表达式。

语法如下所示:

def 函数名(参数列表):
    函数体
    return语句
# 定义一个函数 往里面穿两个参数
def sum(arg1, arg2):
    # 返回2个参数的和."
    total = arg1 + arg2
    return total

# 调用sum函数
sumNum = sum(10, 20)
print(sumNum) // 30

3、函数的参数

除了定义函数和调用函数等基本操作之外,在函数中还可以使用参数。函数的参数简单的来说就是可以函数的函数体中使用的变量。与变量不同的是,这样的变量的是在函数体之前传递进去的。

3.1 参数的默认值

调用函数时,如果没有传递参数,则会使用默认参数。

def printInfo(name, age=12):
    "打印任何传入的字符串"
    print("名字: ", name)
    print("年龄: ", age)
    return

# 调用a函数
printInfo(age=10, name="小红")
print("------------------------")
printInfo(name="小明")

3.2 可变参数

所谓可变参数指的是在调用函数时,可以向函数传入0个或任意多个参数。

# 用星号表达式来表示stamp可以接收0个或任意多个参数
def printInfo(*stamp):

    # 可变参数可以放在for循环中取出每个参数的值
    for i in stamp:
        print(i)
    return

printInfo("一碗周")
printInfo(1, 2, 3, 4, 5, 6, 7)
printInfo("hello", "hi")

4、用模块管理函数

在同一个.py文件中如果有两个函数名是重名的,由于Python没有函数重载的概念,那么后面的定义会覆盖之前的定义,也就意味着两个函数同名函数实际上只有一个是存在的。这个时候模块的作用就体现出来了。

Python中的每个文件就代表了一个模块(module),在不同的模块中可以有同名的函数,在使用某个函数的时候可以通过import关键字引入指定的模块就可以区分每个函数了。

例:定义两个模块,分别为module1module2,然后测试引入流程

module1

def printinfo():
    print("这是第一个模块的printinfo函数")

module2

def printinfo():
    print("这是第二个模块的printinfo函数")

使用import关键字直接引入:

import module1
import module2
# 通过模块名加.函数名的方式引入
module1.printinfo()
module2.printinfo()

使用import...as关键字重命名引入:

import module1 as m1
import module2 as m2
# 可以通过重命名后的名字加.函数名的方式引入
m1.printinfo()
m2.printinfo()

使用from...import...as关键字重命名引入某个函数:

from module1 import printinfo as p1
from module2 import printinfo as p2
# 可以通过重命名后的名字加.函数名的方式引入
p1()
p2()
  • 值得注意的是:这里如果不使用as进行重命名的话,因为有两个printinfo就会导致错误,所以需要为其重命名

__name__ == '__main__'的用法
__name__Python中一个隐含的变量它代表了模块的名字,如果直接打印__name__,则出现__main__。

4.1 示例代码module.py

def printinfo():
    print("这是函数内的内容")

print(__name__)
print("这是模块函数外的内容")

输出结果:

# __main__
# 这是模块函数外的内容

如果将module.py作为模块引入则打印的结果为模块的名称(不带路径、扩展名)
示例代码

import module

输出结果:

module
这是模块函数外的内容

此时输出的结果就不一样了,简单来说:在module.py自己眼中name就是main,然而在别的文件眼中name就是module

module.py改造一下

def printinfo():
    print("这是函数内的内容")

printinfo()
if __name__=="__main__":
    print(__name__)
    print("这是模块函数外的内容")

输出结果:

这是函数内的内容
__main__
这是模块函数外的内容

当其他文件引入时

import module

输出结果:

这是函数内的内容

因为其他文件引入时不会执行模块中if条件成立时的代码 因为模块的名字是module而不是__main__

__name__ == '__main__'在实际场景中非常有用,一般在写模块的过程中肯定要进行测试,在导入的时候肯定不能将测试结果也打印出来,如果删除了,想要改进模块的时候又要重新写一遍,这个时候__name__ == '__main__'就派上了用场

5、变量的作用域

请看如下代码:

def test():
    b = "这是函数的变量"

    def test_nested():
        c = "这是嵌套的函数变量"
        print(a)
        print(b)
        print(c)
    test_nested()

if __name__ == "__main__":
    a = "这是全局作用域"
    test()

根据这段代码,来理解变量的作用域

此时在函数test_nested体内调用a,b,c三个函数都不会报出任何错误,

如果在函数体外调用b变量就会报出

print(b)
NameError: name 'b' is not defined

变量b未定义的错误,因为b属于局部变量,属于局部作用域,在函数体外是访问不到的

如果在test函数体内调用c则会报出

print(c)
NameError: name 'c' is not defined

变量c未定义的错误,因为c是在test_nested函数体内,对于test函数来说属于局部作用域,但是对于test函数内部的test_nested函数来说,变量b属于嵌套作用域,在test_nested函数中我们是可以访问到它的。

如果通过global来将b提升为全局变量,则在函数体外调用b变量就会正常打印

nonlocal关键字只能作用于局部变量,且始终找离当前最近的上层局部作用域中的变量

def outer():
    aa = 111

    def inner():
        nonlocal aa
        aa = 222
        print(aa)
    inner()
    print(aa)

outer()

如果没有这个nonlocal关键字则函数体inner打印222,函数体outer打印111,加上之后则直接打印两个222

Python查找一个变量时会按照“局部作用域”-->“嵌套作用域”-->“全局作用域”-->“内置作用域”的顺序进行搜索,所谓的“内置作用域”就是Python内置的那些标识符,之前用过的inputprintint等都属于内置作用域。

到此这篇关于Python函及模块的使用的文章就介绍到这了,更多相关Python函及模块使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python模块shutil函数应用示例详解教程

    目录 本文大纲 知识串讲 1)模块导入 2)复制文件 3)复制文件夹 4)移动文件或文件夹 5)删除文件夹(慎用) 6)创建和解压压缩包 本文大纲 os模块是Python标准库中一个重要的模块,里面提供了对目录和文件的一般常用操作.而Python另外一个标准库--shutil库,它作为os模块的补充,提供了复制.移动.删除.压缩.解压等操作,这些 os 模块中一般是没有提供的.但是需要注意的是:shutil 模块对压缩包的处理是调用 ZipFile 和 TarFile这两个模块来进行的. 知识串

  • 关于Python OS模块常用文件/目录函数详解

    模块:包含定义函数和变量的python文件,可以被别的程序引入. os模块是操作系统接口模块,提供了一些方便使用操作系统相关功能函数,这里介绍下os模块中对于文件/目录常用函数和使用方法. 1. 返回当前文件目录:getcwd() 2.改变工作目录:chdir(path) 将当前工作目录更改为path的目录 3. 更改当前进程根目录:chroot(path) 4.列举出目录中的文件名:listdir(path) 返回列表,包含了path所有文件和目录名称,排序无顺序 5.创建目录:mkdir(p

  • Python编程itertools模块处理可迭代集合相关函数

    容器与可迭代对象 在正式开始前先补充一些基本概念在 Python 中存在容器 与 可迭代对象 容器:用来存储多个元素的数据结构,例如 列表,元组,字典,集合等内容: 可迭代对象:实现了 __iter__ 方法的对象就叫做可迭代对象. 从可迭代对象中还衍生出 迭代器 与 生成器: 迭代器:既实现了 __iter__,也实现了 __next__ 方法的对象叫做迭代器: 生成器:具有 yield 关键字的函数都是生成器. 这样就比较清楚了,可迭代对象的范围要大于容器.而且可迭代对象只能使用一次,使用完

  • Python基础知识之函数,类,模块

    目录 1.Function 函数 1)定义函数 2)参数设置 3)全局和局部变量 2.Class类 1)定义class 2)class的功能 3)继承 4)私有属性和功能 5)特殊方法 3.Module模块 1)引用module 2)大项目的模块管理 总结 1.Function 函数 编程中,需要重复写的功能,可以包装成一个函数 1)定义函数 定义函数之前,实现给一个字符串增加前缀和后缀的操作: f1 = "f1" f2 = "f2" f1 += ".tx

  • Python模块glob函数示例详解教程

    目录 本文大纲 支持4个常用的通配符 1)glob()函数 2)iglob()函数 3)escape()函数 总结 本文大纲 glob模块也是Python标准库中一个重要的模块,主要用来查找符合特定规则的目录和文件,并将搜索的到的结果返回到一个列表中.使用这个模块最主要的原因就是,该模块支持几个特殊的正则通配符,用起来贼方便,这个将会在下方为大家进行详细讲解. 支持4个常用的通配符 使用glob模块能够快速查找我们想要的目录和文件,就是由于它支持*.**.? .[ ]这三个通配符,那么它们到底是

  • python copy模块中的函数实例用法

    1.copy.copy()函数可用于复制列表或字典等可变值,复制后的列表和原列表是两个独立的列表. import copy origin = [1,2,3] new = copy.copy(origin) new[0] = 0 print("origin = ",origin) print("new = ",new) 2.如果要复制的列表中有列表,则使用deepcopy()函数完全复制. import copy origin =[[1,2,3],['a','b','

  • Python中非常实用的Math模块函数教程详解

    目录 math模块常数 1. 圆周率 2. Tau (τ) 3. 欧拉数 4. 无限 5. 不是数字 算术函数 1. factorial() 2. ceil() 3. floor() 4. trunc() 5. isclose() 幂函数 1. exp() 2. 对数函数 其他重要的math模块功能 由于该math模块与 Python 版本一起打包,因此您不必单独安装它,直接导入: import math math模块常数 Pythonmath模块提供了多种预定义常量.访问这些常量提供了几个优点

  • Python编程functools模块中创建修改函数的高阶函数解析

    partial 函数 partial 为偏函数(有的地方也叫做部分应用函数),它是对函数的二次封装,将现有函数的部分参数提前绑定为指定值,然后再进行计算. 由于偏函数的可变参数少,因此函数调用的难度低. 直接展示代码: from functools import partial # 原函数声明 def show(name, level): print("name:", name, "level:", level) # 定义偏函数,封装 show() 函数,并为 na

  • Python函数式编程中itertools模块详解

    目录 容器与可迭代对象 count() 函数 cycle 函数 repeat 函数 enumerate 函数,添加序号 accumulate 函数 chain 与 groupby 函数 zip_longest 与 zip tee 函数 compress 函数 islice.dropwhile.takewhile.filterfalse.filter 总结 容器与可迭代对象 在正式开始前先补充一些基本概念在 Python 中存在容器 与 可迭代对象 容器:用来存储多个元素的数据结构,例如 列表,元

  • python函数存储在模块的优点及用法总结

    1.通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上. 2.能让你在众多不同的程序中重用函数. 将函数存储在独立文件中后,可与其他程序员共享这些文件而不是整个程序.知道如何导入函数还能让你使用其他程序员编写的函数库. 实例 导入模块中的所有函数 from tags import * make_tags('世界美术名作二十讲 : 插图珍藏本', '艺术') print_tags(['艺术史', '艺术']) Python 在读取这个文件时, 代码 import tag

随机推荐