IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python实现代码复用的手段? -> 正文阅读

[Python知识库]Python实现代码复用的手段?

目录

前言

函数--实现代码复用

(1)定义函数

(2)函数调用

(3)函数参数

(4)传参解包

(5)作用域


前言

是否遇到过有很多操作是完全相同或者非常相似的情况,他们之间区别仅仅在于数据不同,不同的代码位置多次执行相似甚至完全相同的代码块。在这里,解决此类问题,可以选择借助“函数”技巧和“类”的手段。

函数--实现代码复用

(1)定义函数

实现代码复用的第一种手段就是使用函数。在Python中,使用def关键词来定义函数,给予函数名和括号,括号内可填补此函数形参列表,尾接冒号,隔行加上注释,再编写函数体,即可完成了一个函数的整体定义。

函数的定义格式:def 函数名 ( [参数列表] ):

????????????????????????????????????'''注释'''

????????????????????????????????????函数体

语法上注意:与C语言有个很大不同,Python函数形参不需要声明其类型,解释器会自行判断,也不需要指定函数的返回值类型,return语句结束函数执行的同时可返回任意类型值,这取决于返回表达式的类型。若未执行return语句结束函数,Python将认为该函数以return None结束,返回为空值。

适当注释可方便用户得到提示,使用内置函数help()可查看函数的使用帮助。

(2)函数调用

函数调用时,应以下注意几点要求:

1.匹对调用函数的参数,如果传入的参数数量或者参数的类型不对,会报TypeError的错误;

2.函数定义后才可调用,须注意编译器编译顺序问题;

3.形参位置对应,传递的实参与形参在位置上是一一匹配的。

def afunctions (an,ai):
    if an==ai or an==0:
        return an+ai
    elif an not in [3,2,5]:
        return an-ai
>>> afunctions(75,75)
150

递归调用是函数调用的特殊情况,可实现层层调用自己进行运算。

def fact(n):    #递归函数
    return fact_iter(n, 1)

def fact_iter(num, product):
    if num == 1:
        return product
    return fact_iter(num - 1, num * product)

(3)函数参数

Python支持默认值参数,用户在定义函数时可设置默认值,默认值参数传递实参是可选的。不过需要注意:def? 函数名? (......,形参名 = 默认值):任何一个默认值参数右边都不能出现没有默认值的普通位置参数。使用“函数名.__defaults__”可随时依次查看函数所有默认参数的当前值,返回值为元组形式。

def afunctions (an=6,ai=2):
    print(an);print(ai)
>>> afunctions.__defaults__
(6, 2)

函数的默认值参数是在函数定义时确定的,多次调用函数并且不为默认值参数传值,默认参数只在函数定义时进行一次解释和初始化。

>>> an = 5
>>> def func(n = an):
...     print(n)
>>> func()
5
>>> an=7
>>> func()
5

由于Python基于值的内存管理模式,在调用函数时,实参到形参的过程同样完成的是引用的传递,即Python函数不存在传值调用。如果传递给函数的是列表、字典、集合或其他可变序列,并且在函数内部使用下标等方式可对序列进行更改时,其结果是可以反应到函数之外的。

函数传值也可采用关键参数的参数传递方式,明确指定哪个值传递给哪个参数,这种情况,实参顺序是可以与形参顺序不一样的。

def afunctions (an,ai):
    print(an);print(ai)
>>> afunctions(ai=23,an=45)
45
23

定义函数时,也可采用*parameter和**parameter可变长度参数形式,*parameter将接受任意多个实参合并放在一个元组中,**parameter将接受类似于关键参数一样显示赋值形式的多个参数合并放入字典。这种方式函数设计不恰当很可能出现报错。?

(4)传参解包

序列解包对象是指实参,与可变长度相似,存在*与**形式。

对于序列,元组、集合等可迭代对象作为实参,使用*可对序列进行解包,并按顺序依次分别传递给形参。实参对象是字典,默认是对字典的“键”操作。

def afunctions (an=6,en=2,un=7):
    print(an);print(en);print(un)
>>> sen = {2:'apple',3:'banana',4:'cherry'}
>>> afunctions(*sen.values())
apple
banana
cherry

采用**形式进行关键参数解包,与关键参数功能相似,若应用于字典,要求字典中所有的键都必须与函数形参相对应。另外注意,序列解包与关键参数解包可同时使用,序列解包不能放在关键参数解包之后。

(5)作用域

变量起作用的代码范围成为变量的作用域,不同的作用域内同名变量之间互不干扰。

这里提及到作用域的问题,不仅要考虑到函数的作用域,还需考虑到变量的作用域。这一个Python的程序文件中,函数的作用域为整个文件,当然还要根据实际情况,要在函数定义后调用。

而变量可分为两种,全局变量和局部变量,在某个函数中普通定义的变量为局部变量,作用域也就是这个函数内,函数调用结束,该变量引用内存被Python释放,全局变量则不同,它的作用域在这整个程序文件。在函数内部,可通过global关键词声明或者定义全局变量。

局部变量若与全局变量同名时,那么局部变量会在自己的作用域内暂时隐藏同名的全局变量。

>>> def demonate():
...     an = 5; en = 7
...     print(an,en)
...
>>> an = 8
>>> demonate()
5 7
>>> en
'''Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'en' is not defined. Did you mean: 'an'?'''

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 23:02:34  更:2022-01-29 23:02:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:24:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码