轻量级Python IDE使用(三)——函数
1、函数
1.1、函数的概述
在程序设计中,函数的使用可以提升代码的复用率和可维护性。
系统内建函数pow()进行幂运算:
a = pow(2,4)
自定义函数func()
def func(a,b):return a ** b
a=func(2,4)
print(a)
自定义函数func(),功能是输出a的b次幂
1.2、函数的定义
python语言中,函数通常是由函数名、参数列表以及一系列语句组成的函数体构成的。函数定义一般如下
def 函数名(参数列表)函数体
例:
def foo():print("I am")print("foo")
以上第一的foo()函数虽然不含任何参数,但是函数名后的一对括号是不能省略的。在实际应用中,稍复杂的函数通常会包含一个或多个参数。
def area(width,height):return width * height
#调用area
w = 7
h = 9
print("width=",w,"height=",h,"area=",area(w,h))
以下定义了无任何操作的空函数none()
def none():pass
在Python中,pass语句通常可以用来作为占位符,表示什么操作也不执行。比如在项目起始阶段,如果还没想好函数具体实现时,可以先放置一个pass语句让代码先成功运行起来。待项目框架搭建完毕后,在进行相应的具体实现。
通常情况下,在Python语言中定义一个具有特定功能的函数需要符和以下规则:
- 函数代码块以def关键字开头,后接函数标识符名称和形参列表;
- 任何传入的参数和自变量必须放在圆括号内;
- 函数的第一行语句可以选择性地使用文档字符串;
- 函数内容以冒号起始,并且严格统一缩进;
- 函数都有返回值,默认返回None
1.3、形参和实参
在编程语言中,函数定义的时形参,调用的是实参。
形参(parameter),全称"形式参数",不是实际存在的变量。又称虚拟变量。用来接收调用该函数时传入的参数。
实参(argument),全称"实际参数",是调用时传递给函数的参数。实参可以是常量、变量、表达式、函数等。
def area(width,height):return width * height
#调用area
w = 7
h = 9
print("width=",w,"height=",h,"area=",area(w,h))
其中w=7,h=9中的w,h是实参,area(w,h))中的w,h是形参
可见实参传入函数形参位置,调用完后不会影响实参的值
a = 1
b = 2def func(x,y):x+=1y+=2print(x)#2print(y)#4
func(a,b)
print(a)#1
print(b)#2
func(a,b)等效于func(1,2)、func(x=1,y=2)、func(y=2,x=1)
1.4、函数的返回值
在Python中,当函数运行到return语句时即执行完毕,同时将结果返回。因此,可以在函数内部同通过条件判断和循环设置实现较复杂的逻辑,并返回预期的结果。如果没有return语句,函数体内所有语句执行完毕后默认返回None。
def add(x,y):print('x+y=',x+y)return x+y
result = add(y=1,x=2)
print(result)
函数也可以有多个返回值
def add(x,y):print('x+y=',x+y)print('x*y=',x*y)return x+y,x*y
a,b = add(y=1,x=2)
print(a,b)
注意返回值和接收变量的关系是一一对应的
2、函数分类
2.1 内置函数
Python语言中自带的函数叫做内建函数,这些内建函数对大部分常用操作进行有效封装,可以直接调用,为开发提供了极大便利。由于内建函数是Python语言内置的函数,因此不需要导入任何函数库即可直接调用。常用的内建函数如下:
-
abs(x):返回x的绝对值。
-
all(iterable):如果iterable的所有元素都为True,则返回True;否则返回False。
-
any(iterable):如果iterable的任意一个元素为True,则返回True;否则返回False。
-
ascii(obj):返回一个可打印的对象的字符串表示。
-
bin(x):将整数x转换为二进制字符串。
-
bool(x):将x转换为布尔值。如果x为False、0、空列表、空字典和空字符串,则转换为False;否则转换为True。
-
bytearray(iterable):返回一个由可迭代对象iterable中的元素组成的字节数组。
-
bytes(iterable):返回一个由可迭代对象iterable中的元素组成的字节对象。
-
callable(obj):如果obj是可调用的(例如函数、方法、类),则返回True;否则返回False。
-
chr(i):返回Unicode值为i的字符。
-
classmethod(func):将函数func转换为类方法。
-
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1):将source编译为代码对象或AST对象。可用于动态执行代码。
-
complex(real, imag):创建一个复数,其中real为实部,imag为虚部。
-
delattr(obj, name):从对象obj中删除名为name的属性。
-
dict():创建一个空字典。
-
dir(obj):返回一个包含对象obj定义的所有属性和方法名称的列表。
-
divmod(a, b):返回a除以b的商和余数的元组。
-
enumerate(iterable, start=0):返回一个枚举对象,其中包含iterable中的每个元素及其对应的索引。
-
eval(expression, globals=None, locals=None):将字符串expression作为Python代码执行,并返回结果。
-
exec(obj[, globals[, locals]]):将对象obj(可以是字符串或代码对象)作为Python代码执行。
-
filter(function, iterable):返回一个由iterable中满足函数function的元素组成的迭代器。
-
float(x):将x转换为浮点数。
-
format(value[, format_spec]):根据format_spec的格式将value转换为字符串。
-
frozenset(iterable):创建一个不可变的集合。
-
getattr(obj, name[, default]):返回对象obj的名为name的属性的值。
-
globals():返回当前全局符号表的字典。
-
hasattr(obj, name):如果对象obj具有一个名为name的属性,则返回True;否则返回False。
-
hash(obj):返回对象obj的哈希值。
-
help(obj):提供对象obj的帮助信息。
-
hex(x):将整数x转换为十六进制字符串。
-
id(obj):返回对象obj的唯一标识符。
-
input([prompt]):从标准输入读取一行字符串。
-
int(x[, base]):将x转换为整数。如果base提供,则将x视为base进制的字符串,将其转换为十进制。
-
isinstance(obj, classinfo):如果对象obj是classinfo的实例或派生类的实例,则返回True;否则返回False。
-
issubclass(class, classinfo):如果class是classinfo的派生类,则返回True;否则返回False。
-
iter(obj[, sentinel]):返回一个迭代器对象。
-
len(obj):返回对象obj的长度(元素个数)。
-
list(iterable):将可迭代对象iterable转换为列表。
-
locals():返回当前局部符号表的字典。
-
map(function, iterable):将函数function应用于iterable中的每个元素,并返回一个包含结果的迭代器。
-
max(iterable[, key]):返回iterable中的最大元素。可以使用key函数指定比较规则。
-
memoryview(obj):返回对象obj的内存视图,可以用于对对象进行原生内存操作。
-
min(iterable[, key]):返回iterable中的最小元素。可以使用key函数指定比较规则。
-
next(iterator[, default]):返回迭代器iterator的下一个元素。如果已经到达迭代器的末尾,则返回default。
-
object():返回一个没有任何特别行为的新对象。
-
oct(x):将整数x转换为八进制字符串。
-
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None):打开文件,返回文件对象。
-
ord©:返回字符c的Unicode值。
-
pow(x, y[, z]):返回x的y次方,如果提供了参数z,则计算结果的模为z。
-
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False):将对象打印到流文件,默认为标准输出。
-
property(fget=None, fset=None, fdel=None, doc=None):创建一个属性,其中fget、fset和fdel为获取、设置和删除属性值的方法。
-
range(stop):返回一个从0到stop-1的整数序列。
-
repr(obj):返回对象obj的字符串表示形式。
-
reversed(seq):返回一个逆序迭代器,用于迭代序列seq的元素。
-
round(number[, ndigits]):返回一个浮点数的四舍五入值。
-
set(iterable):创建一个集合,其中包含iterable中的元素。
-
setattr(obj, name, value):将对象obj的属性name设置为value。
-
slice(stop):创建一个切片对象,用于切取从0到stop-1的元素。
-
sorted(iterable[, key[, reverse]]):返回iterable排序的副本。
-
staticmethod(func):将函数func转换为静态方法。
-
str(obj):将对象obj转换为字符串。
-
sum(iterable[, start]):返回iterable的求和结果。
-
super([type[, object-or-type]]):返回一个链式对象,用于在多重继承中调用父类方法。
-
tuple(iterable):将可迭代对象iterable转换为元组。
-
type(obj):返回对象obj的类型。
-
vars([object]):返回对象object的__dict__属性,或返回当前局部符号表的字典。
-
zip(*iterables):将多个迭代器作为参数,将对应位置的元素组合成元组。
-
1__import__ (name[, globals[, locals[, fromlist[, level]]]]):使用import机制导入一个模块。
-
openpyxl():用于操作Excel文件的库。
在Python语言中,除内建函数外的其他类型函数通常被称为第三方函数。
a = abs(-100)
b = max(-1,4,0,-2,13,4)
print(a,b)#100 13
Python语言常用的内建函数还包括数据类型转换函数。
print("int('12'):",int('12'))
print("int(12.5):",int(12.5))
print("float('12.5'):",float('12.5'))
print("str(1.25):",str(1.25))
print("str(10):",str(10))
print("bool(1):",bool(1))#True
print("bool(''):",bool(''))#False
Python语言中,还可以把函数名赋给一个变量,相当于给这个函数起了一个别名。
a = abs
print(a(-1))
2.2 自定义函数
当内建函数不能满足要求时,开发者可以根据实际需要自定义函数。函数自定义完成后,开发者可以在其他代码处通过函数名调用。
def printme(str):"函数功能:打印传入的字符串"print(str)printme("调用自定义函数")
在Python语言中,内建函数可以直接使用,第三方函数需要使用import命令导入相应的库才能使用。对于自定义函数,其定义和调用可以在用一个文件中,也可分离成不同的文件。
定义一个func.py并写入hello函数
def hello():print("你好")
在一个新的xx.py文件中调用hello
from func import hello
hello()
3、函数参数
3.1 参数种类
函数参数分为可变类型和不可变类型,其调用结果是不同的。
- 可变类型:类似c++的引用传递。如列表、字典等。如果传递的参数是可变类型,则在函数内部对传入参数的修改会影响到外部变量。
- 不可变类型:类似c++的值传递,如整数、字符串、元组等。如果传递到达参数是不可变类型,则在函数内部对传入的参数的修改不会影响到外部变量。
不可变类型参数,例:
def change_int(a):a=10
b=2
change_int(b)
print(b)#结果是2
b的值不变
可变类型参数,例:
def change_int(my_list):my_list.append([1,2,3])print("函数内修改后的变量:", my_list)#[10, 20, 30, [1, 2, 3]]my_list =[10,20,30]
change_int(my_list)
print("函数外变量的值:", my_list)#[10, 20, 30, [1, 2, 3]]
my_list的值改变
3.2 位置参数
调用函数时,Python语言必须将函数调用中的每个实参都关联到函数的相应形参。最简单的关联方式是基于实参的顺序,这种关联方式被称为位置实参。
def student_info(name,age):print("my name is",name ,age," years old")student_info('jack',24)
输出
my name is jack 24 years old
3.3 默认参数
编写函数时,可给每个形参指定默认值。注意,必选参数在前,默认参数在后。
以下错误示例
def student_info(name='liuj',age):print("my name is",name ,age," years old")
正确操作
def student_info(name,age=24):print("my name is",name ,age," years old")student_info('jack')
3.4 不定长参数
开发者可以将一个list或tuple传进来
def sum(numbers):i=0for n in numbers:i = i + nreturn i
print(sum([1,2,3]))#6
print(sum([1,2,3,4]))#10
也可以在函数参数前面添加一个*号把该参数定义为不定长参数
def sum(*numbers):i=0for n in numbers:i = i + nreturn i
print(sum())#0
print(sum(1,2,3,4))#10
num = [1,2,3]
print(sum(*num))#6
3.5 关键字参数
关键字实参是传递参数时使用“名称-值”对的方式,在实参中将名称和值关联起来。无须考虑函数调用中的实参顺序。
def func(a,b):return pow(a,b)
print(func(b=4,a=3))#81
3.6 命名关键字参数
如果要限制关键字参数的名字,可以使用命名关键字参数。和关键字参数**kw不同,如果没有可变参数,命名参数关键字参数就必须加一个 * 号作为特殊分隔符。如果缺少 * ,Python语言解释器将无法识别位置参数和命名关键字参数。
例如,若只接收age和city作为关键字参数,可以采用如下形式。
def person_info(name,denger,*,age,city):print(name,denger,age,city)person_info('jack','M',age=18,city='guangzhou')
注意
*表示不定长参数
**表示不定长的关键字参数
3.7 参数组合
在Python语言中定义函数,开发者可以组合使用这些参数(必选参数、默认参数、可变参数、关键字参数和命名关键字参数)。注意参数定义是有顺序的。定义顺序必须是:必选参数、默认参数、可变参数、命名关键字参数、关键字参数。
def func(a,b,c=0,*args,**kw):print(a,b,c,args,kw)func(1,2,3,'a','b',x=4,y=7,z=8)
运行结果:
1 2 3 ('a', 'b') {'x': 4, 'y': 7, 'z': 8}
4、函数式编程
- 函数式编程是一种编程范式,是面向数学的抽象,其将计算描述为一种表达式求值。
- 函数式编程中的函数不是指计算机的函数,而是指数学中的函数,即自变量的映射。
- 函数式编程的一个特点是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数。
4.1、高阶函数
接受函数为参数,或者把函数作为结果返回的函数称为高阶函数。
word = ['apple','blue','car','did']
def reverse(word):return word[::-1]print(sorted(word,key=len))print(reverse('testing'))print(sorted(word,key=reverse))
4.2、匿名函数
所谓的匿名函数,就是不再使用def语句这样的标准形式定义的函数,Python经常使用lambda来创建匿名函数。
lambda arg1,arg2…:expression
sum = lambda arg1,arg2:arg1+arg2
print(sum(2,3))
相关文章:

轻量级Python IDE使用(三)——函数
1、函数 1.1、函数的概述 在程序设计中,函数的使用可以提升代码的复用率和可维护性。 系统内建函数pow()进行幂运算: a pow(2,4)自定义函数func() def func(a,b):return a ** b afunc(2,4) print(a)自定义函数func(),功能是输出a的b次幂 1.2、函数的定义 py…...

计算机图形学理论(3):着色器编程
本系列根据国外一个图形小哥的讲解为本,整合互联网的一些资料,结合自己的一些理解。 CPU vs GPU CPU支持: 快速缓存分支适应性高性能 GPU支持: 多个 ALU快速板载内存并行任务的高吞吐量(在每个片段、顶点上执行着色…...

ubuntu20.04安装timeshift最新方法
总结: 现在可以使用如下代码安装 sudo apt-get update sudo apt-get install timeshift原因: 在尝试Timeshift系统备份与还原中的方法时, sudo apt-add-repository -y ppa:teejee2008/ppa运行失败。 更改为以下代码: sudo a…...

小狐狸ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法
最新版2.6.7版下载:https://download.csdn.net/download/mo3408/88656497 很多会员在上传小程序前端时经常出现首页无法打开的情况,错误提示无法打开该页面,不支持打开,这种问题其实就是权限问题,页面是通过调用web-v…...

DQL-基本查询
概念: 1,数据库管理系统一个重要功能就是数据查询,数据查询不应只是简单返回数据库中存储的数据,还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示 2,MySQL提供了功能强大、灵活的语句来实现这些操作 3…...

漏洞复现-红帆OA iorepsavexml.aspx文件上传漏洞(附漏洞检测脚本)
免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…...

Leetcode 2976. Minimum Cost to Convert String I
Leetcode 2976. Minimum Cost to Convert String I 1. 解题思路2. 代码实现 题目链接:2976. Minimum Cost to Convert String I 1. 解题思路 这道题思路上其实是非常直接的,本质上就是给出有向图之后,求出有向图上任意两点之间的最短距离&…...

ZKP Mathematical Building Blocks (2)
MIT IAP 2023 Modern Zero Knowledge Cryptography课程笔记 Lecture 3: Mathematical Building Blocks (Yufei Zhao) Fiat Shamir heuristic Turn an interactive proof to a non-interactive proofP can simulate V whenever V picks a random valueP can simulate V’s ran…...

blender径向渐变材质-着色编辑器
要点: 1、用纹理坐标中的物体输出连接映射中的矢量输入 2、物体选择一个空坐标,将空坐标延z轴上移一段距离 3、空坐标的大小要缩放到和要添加材质的物体大小保持一致...

2023美团机器人研究院学术年会成功举办
2023年12月19日,深圳市美团机器人研究院学术年会在清华大学深圳国际研究生院成功落下帷幕。会议回顾了研究院成立一年来的进展和成果,并邀请了各界专家共同讨论机器人技术的未来发展趋势。此外,年会期间还举办了首届低空经济智能飞行管理挑战…...

swing快速入门(二十七)
注释很详细,直接上代码 上一篇 新增内容 1.为按钮指定图标 2. 列表框的并列 3.菜单项绑定快捷键 4.控件悬浮提示信息 5.菜单项设置小图标 6.五种布局风格右键选择切换 package swing21_30;import javax.swing.*; import java.awt.*; import java.awt.event.…...

Vue 封装echarts柱状图(Bar)组件
目的:减少重复代码,便于维护 显示效果 组件代码 <template><div class"ldw-data-content-box"><div class"ldw-chilren-box"><div class"title" v-if"title">{{ title }}</div>…...

异常(Java)
1.异常的概念 在 Java 中,将程序执行过程中发生的不正常行为称为异常 。 1.算数异常 System.out.println(10 / 0); // 执行结果 Exception in thread "main" java.lang.ArithmeticException: / by zero 2.数组越界异常 int[] arr {1, 2, 3}; System.out.…...

vue的插槽解析
插槽 好处:组件的内容结构可定制 用slot插槽进行占位 语法: 子组件中通过slot进行占位 理解:父组件,在子组件标签嵌套的内容就会被渲染到slot地方 一、默认插槽 //子组件 <slot>slot插槽</slot> //方法一<slot name"…...

Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理
Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理 文章目录 Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理4 Spring整合技术示例4.1 Spring整合Mybatis4.1.1 Mybatis开发回顾4.1.2 整合Spring分析4.1.3 Spri…...

适配器模式学习
适配器模式(Adapter)将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式分为类适配器模式和对象适配器模式两种,前者类之间的耦合度比后者高,且要…...

NET中使用Identity+CodeFirst+Jwt实现登录、鉴权
目录 前言 一、创建上下文类 1.自定义MyContext上下文类继承IdentityDbContext 2.在Program中添加AddDbContext服务 二、使用Migration数据迁移 1.在控制台中 依次使用add-migration 、updatebase 命令 2.如何修改表名 3.如何自定义字段 三、使用Identity实现登录、修改密码 …...

详解Keras3.0 API: Optimizers
Optimizers 优化器(Optimizer)是深度学习中用于更新模型参数的一种方法,它的目标是最小化损失函数。在训练神经网络时,我们通常使用梯度下降法来更新参数,而优化器就是实现这一过程的工具。优化器的主要作用是在每次迭…...

【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化
字符串匹配算法是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目,本文主要介绍BF算法(最好想到的算法,也最好实现)和KMP算法(最经典的) 一、BF算法 BF算法,即暴力(Bru…...

阿里云 ACK One 新特性:多集群网关,帮您快速构建同城容灾系统
云布道师 近日,阿里云分布式云容器平台 ACK One[1]发布“多集群网关”[2](ACK One Multi-cluster Gateways)新特性,这是 ACK One 面向多云、多集群场景提供的云原生网关,用于对多集群南北向流量进行统一管理。 基于 …...

vscode自定义代码片段
前言 代码片段,指的是能够帮助输入重复代码模式,比如初始页面的模板。通过 snippet ,我们仅仅输入一小段字符串,就可以在代码片引擎的帮助下,生成预定义的模板代码,接着我们还可以通过在预定义的光标位置之…...

【贪心算法】专题练习一
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 前言 1.什么是贪心算法?——贪婪鼠目寸光 贪心策…...

【JMeter】使用nmon进行性能资源监控
一、前言 在工作中可能会遇到需要在压测的时候对Linux服务器进行性能资源监控的情况。这时可以用nmon来对服务器进行监控。 二、nmon的下载安装 1.查看系统信息 shell cat /etc/os-release 结果为 shell PRETTY_NAME"Debian GNU/Linux 12 (bookworm)" NAME&…...

Unity预设体
目录 预设体是什么? 如何创建预设体? 如何修改预设体? 如何删除预设体? 预设体是什么? Unity中的预设体(Prefab)是一种可重复使用的游戏对象模板。它允许开发者创建一个或多个游戏对象&…...

Elasticsearch 写入优化探索:是什么影响了refresh 耗时?
1、问题背景: 数据写入后,refresh耗时过长,能达到1s-5s。 想通过测试,探索确认影响refresh的因素,比如:写入操作是新增还是更新,deleted文档占比是否有影响,是否有其他索引配置&…...

Java8新特性——函数式接口
目录 一、介绍 二、示例 (一)Consumer 源码解析 测试示例 (二)Comparator (三)Predicate 三、应用 四、总结 一、介绍 FunctionalInterface是一种信息注解类型,用于指明接口类型声明…...

Epson打印机连接wifi
环境 Epson L3153 打印机联通无线光猫 背景 最近家里的联通宽带不太稳定,经常断网。今天打了联通客服电话,师傅上门来,说可能是光猫用的时间太长了,换了一个新的联通光猫,问题解决。 wifi的名称是 CU_Y3ft 和 CU_Y3…...

Chapter 7 - 6. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理
Dedicated and Converged Ethernet Network专用和融合以太网网络 Just because a network is configured as a converged Ethernet network (lossy and lossless traffic), doesn’t necessarily mean that lossy and lossless traffic runs on it simultaneously. For exampl…...

【论文笔记】NeuRAD: Neural Rendering for Autonomous Driving
原文链接:https://arxiv.org/abs/2311.15260 1. 引言 神经辐射场(NeRF)应用在自动驾驶中,可以创建可编辑的场景数字克隆(可自由编辑视角和场景物体),以进行仿真。但目前的方法或者需要大量的训…...

通信原理 | 分贝dB、功率、功率谱、功率谱密度、信噪比
文章目录 分贝功率和分贝的关系能量谱功率谱功率谱和功率谱密度是不同的功率谱密度随机信号和确知信号信噪比基本定义分贝表示应用分贝 分贝:(用dB表示)是量度两个相同单位之间数量比例的计量单位,主要用于度量声音强度。 1贝尔(B)=10分布(dB),即1B = 10dB 分贝是以美国…...