Python学习笔记(五)函数和代码复用
函数能提高应用的模块性,和代码的重复利用率。在很多高级语言中,都可以使用函数实现多种功能。在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print()。同样,你也可以自己创建函数,这被叫做用户自定义函数,来实现定制的功能。
一、函数的基本使用
1.函数的定义
函数是一段具有特定功能的、可重用的语句组,用函数名来表示并通过函数名进行功能调用。
函数能够完成特定功能,与黑盒类似,对函数的实用不需要了解函数内部实现原理,只要了解函数的的输入和输出方式即可。所以说,函数是一种功能抽象。
使用函数有两个目的:降低编程难度和代码重用。所以在编程中的复杂功能可以使用函数实现。
其中,Python使用 def 保留字定义了一个函数,语法如下:
def <函数名> (<参数列表>):
<函数体>
return <返回值列表>
注:当参数类表中有多个参数,默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
2.函数的调用过程
程序调用一个函数需执行一下4个步骤:
(1)调用程序在调用处暂停执行。
(2)在调用时将实参复制给函数的形参。
(3)执行函数体语句。
(4)函数调用结束给出返回值,程序回到调用前的暂停处继续执行。
从函数的调用过程中,人们引申出了函数式编程这个概念。函数式编程是一种编程范式,常见的编程范式还包括命令式编程和面向对象编程等。函数编程的主要思想是把程序过程通过使用一系列函数能够使代码编写更简洁、更易于理解,是中小规模软件项目中最常见的一种编程方式。
二、函数的参数传递
1.可选参数和可变数量参数、
可选参数
在定义函数时,如果有些参数存在默认值,即部分函数不一定需要调用程序输入,可以在定义函数时直接为这些参数指定默认值。当函数被调用时,如果没有传入对应的参数值,则使用函数定义时的默认值替代。例如:
使用默认参数:
def printf(str, times = 3):
print(str * times)
>>>printf("hello")
hello
hello
hello
输入参数
def printf(str, times = 3):
print(str * times)
>>>printf("hello",2)
hello
hello
可变量参数
在函数定义时,也可以设计可变量参数,通过在参数前增加星号(*)实现。带有星号的可变参数只能出现在参数列表的最后。调用时,这些参数被当作元组类型传递到函数中。
例如:
def printf(times,*b):
print(b*times)
printf(2,1,2,3)
>>>(1, 2, 3, 1, 2, 3)
2.参数的位置和名称传递
Python中提供了按照形参名称输入实参的方式,例如
return = fuc(x1=2, x2=5, x3=8) #其中参数由函数 fuc 决定
由于调用函数时指定了参数名称,所以参数之间的顺序可以任意调整。
3.函数的返回值
return语句用来退出函数并将程序返回被调用的位置继续执行。
同时,函数可以没有return,此时函数并不返回值。函数也可以用return返回多个值,多个值以元组类型保存。
4.函数对变量的作用
一个程序中的变量包括两类:全局变量和局部变量。全局变量指在函数之外定义的变量,一般没有缩进,在程序执行全过程有效。局部变量指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在。
其中Python函数对变量的作用遵守如下原则:
(1)简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放,如有全局同名变量,其值不变。
(2)简单数据类型变量在用 global 保留字声明后,作为全局变量使用,函数退出后该变量保留且值被函数改变。
(3)对于组合数据类型的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可以使用并修改全局变量的值。
(4)如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅对局部变量进行操作,函数退出后局部变量被释放,全局变量值不变。
三、代码复用和模块化设计
函数是程序的一种抽象,它通过封装实现代码复用。可以利用函数对程序进行模块化设计。
程序由一系列代码组成,如果代码是顺序但无组织的,不仅不利于阅读和理解,也很难进行维护和升级。因此,把代码当成资源的抽象,形成易于理解的结构。
函数是程序的一种基本抽象方式,它将一系列代码组织起来通过命名供其他程序使用。函数封装的直接好处是代码复用,任何其他代码只要输入参数即可调用函数,从而避免相同代码在被调用处重复编写。代码复用产生了另一个好处,当更新函数时,所有被调用处的功能都能被更新。
模块化设计指通过函数或对象的封装功能将程序划分成主程序、子程序和子程序间关系的表达。模块化设计是使用函数和对象设计程序的思考方法,以功能块为基本单位,一般有以下两个基本要求:
(1)紧耦合:尽可能合理划分功能块,功能块内部耦合紧密。
(2)松耦合:模块间关系尽可能简单,功能块之间耦合度低。
概括来说,就是模块内部紧耦合、模块之间松耦合
四、函数的递归
1.递归的定义
函数作为一种代码封装,可以被其他程序调用,当然,也可以被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。
递归的两个关键特征:
(1)存在一个或多个基例(问题的最小规模下的解),基例不需要再次递归,它是确定的表达式。
(2)所有递归要以一个或多个基例结尾。
2.递归的使用方法
实例:阶乘的计算。
def fact(n):
if n == 0:
return 1
else:
return n * fact(n-1) n=eval(print())
print(fact(abs(int(n))))
输入:
>>>10
26288800
Python学习笔记(五)函数和代码复用的更多相关文章
- Python学习笔记6函数和代码复用
1.函数 (1)定义: (2)函数调用 (3)函数的参数传递 参数传递的两种方式:函数调用时,参数可以按照位置或名称的方式传递 (4)函数的返回值 (5)局部变量和全局变量 (6)lambda函数 2 ...
- python学习笔记(五)---函数与类
函数 def为定义函数的一个标志 demo1: def greet_user(username): print("Hello, " + username.title() + &qu ...
- Python学习笔记之函数
这篇文章介绍有关 Python 函数中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中函数的使用技巧 1.函数文档 给函数添加注释,可以在 def 语句后面添加独立字符串,这样的注释被 ...
- python学习笔记(五):装饰器、生成器、内置函数、json
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...
- Python学习笔记五,函数及其参数
在Python中如何自定义函数:其格式为 def 函数名(函数参数): 内容
- Python学习笔记 - day6 - 函数
函数 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多次执行(这叫函数的调用).函数在编程语言中有基本分为:预 ...
- 小甲鱼:Python学习笔记003_函数
>>> # 函数>>> def myFirstFunction(params1,params2...): print("这是我的第一个函数!") ...
- python学习笔记五——数据结构
4 . python的数据结构 数据结构是用来存储数据的逻辑结构,合理使用数据结构才能编写出优秀的代码.python提供的几种内置数据结构——元组.列表.字典和序列.内置数据结构是Python语言的精 ...
- Python学习笔记009—函数
1. 空函数 如果想定义一个什么事也不做的空函数,可以用pass语句: def nop(): pass pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数 ...
随机推荐
- 依赖注入(DI)
Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter 方法注入 3. 构造方法注入 依赖注入是一种思想,或者说是一种设计模式,在java中是通过反射机制实现,与具 ...
- Mysql优化系列之表设计规范和优化
一.范式 如果详细的讲范式,要写大大大篇文章来讲,这里假设大家知道一些基本的范式规则,我用简洁的语句和例子说明 第一范式:列不可再分,譬如地址字段,可以再细分为省市区门牌号等等(其实还是看需求怎么整) ...
- 19.SimLogin_case03
# 模拟登录GitHub import requests from lxml import etree class Login(): def __init__(self): self.headers ...
- PyTorch中的C++扩展
今天要聊聊用 PyTorch 进行 C++ 扩展. 在正式开始前,我们需要了解 PyTorch 如何自定义module.这其中,最常见的就是在 python 中继承torch.nn.Module,用 ...
- 使用JavaScript分别实现4种样式的九九乘法表(1X1分别在左上、左下、右上、右下)
第1种样式(左上角):如下图所示 具体实现代码如下所示: 第2种样式(左下角):如下图所示 具体实现代码如下所示: 第3种样式(右上角):如下图所示 具体实现代码如下所示: 第4种样式(右下角):如下 ...
- 2016.10.6初中部上午NOIP普及组比赛总结
2016.10.6初中部上午NOIP普及组比赛总结 中了病毒--病毒--病毒-- 进度: 比赛:AC+0+0+20=120 改题:AC+0+AC+20=220 Stairs 好--简--单!递推就过了 ...
- Python-函数基础(1)
目录 函数定义 什么是函数? 定义函数三种形式 函数定义的特性 函数调用 函数返回值 return的特性: 函数的参数 有参函数 形参 位置形参 默认形参 实参 位置实参 关键字实参 可变长参数 形参 ...
- pb_ds(平板电视)简介
据说NOI赛制可以用pbds,故整理常用方法: 1.splay 所需声明及头文件: #include <ext/pb_ds/tree_policy.hpp> #include <ex ...
- 立体声耳机接口3F07
仅探讨三段式 剩余的两根,则是开关,插入耳机后,会断开,可以用于耳机和扬声器的切换.老式收音机大多采用这个结构
- linux 详解
一.日常使用命令/常用快捷键命令开关机命令 1.shutdown –h now:立刻进行关机 2.shutdown –r now:现在重新启动计算机 3.reboot:现在重新启动计算机 ...