当前位置: 首页 > news >正文

从C到Py:Python中的函数

在本篇文章中,我们将讲解Python中有关函数的部分,如果掌握C语言的基础,那不难发现Python中函数的知识实际也十分相似。

定义

python中定义函数的语法格式:

def 函数名(参数列表):

        函数体

        return 返回值列表

函数名自己定义,不能与保留字等冲突,不能用空格链接,最好替换成下划线。函数体部分实现函数的功能,最后返回值。与C语言相比,python的函数定义过程较为简洁,要求也更宽松。

以下是一个简单的求和函数的实例:

def get_sum(num):s=0for i in range(1, num+1):s+=iprint(f'1加到{num}的和为:{s}')

传参

1、位置传参

调用时参数个数和顺序必须定义相同。

2、关键字传参

调用时使用“形参名称=值”  顺序可以与定义时不同。

def happy_birthday(name, age):print('祝'+name+'生日快乐')print(str(age)+'岁生日快乐')happy_birthday(age=18, name='abc')
# 这里使用关键字传参替换了age和name的位置

PS:一个函数调用可以同时使用以上两种传参

3、默认值传参

在定义时直接对形参赋值,调用时如果不传参,将使用默认值

PS:如果同时使用位置参数,默认值参数,需要将默认值参数置于最后。

4、可变参数

①:个数可变的位置参数

在参数前加一颗星 *para ,调用时可接收任意个数的实际参数,并放到一个元组中。

以下为示例:

def fun(*para):print(type(para))for item in para:print(item)fun(10, 20, 30, 40)
fun(10)
fun([11, 22, 33, 44, 55])
# 以下为输出结果
# <class 'tuple'>
# 10
# 20
# 30
# 40
# <class 'tuple'>
# 10
# <class 'tuple'>
# [11, 22, 33, 44, 55]

②:个数可变的关键字参数

在参数前加两颗星 **para ,调用时可接收任意多个“参数=值”形式的参数,并放到一个字典中。

PS:若要传递字典d,参数写 **d 进行系列解包操作

返回值

这一部分依旧不难理解,就是函数在调用时返回的数值。值得注意的是,python中函数返回值如果是多个,返回结果为元组类型。下面看一个求和函数,他将分别返回奇数和、偶数和以及总和:

def get_sum(num):s=0odd_sum=0even_sum=0for i in range(1, num+1):if i % 2 !=0:odd_sum+=ielse:even_sum+=is+=ireturn odd_sum, even_sum, sprint(get_sum(10))
a, b, c=get_sum(10)
print(a)
print(b)
print(c)
# 以下为输出结果
# (25, 30, 55)
# 25
# 30
# 55

作用域

在函数内部定义的变量称为局部变量,定义在函数外(准确来说是所有程序之前)的变量称为全局变量。不同的变量有不同的作用域,或者说生命周期,简言之我们只需记住在函数内部定义的变量,只能在函数内部操作。

匿名函数lambda

这是Python独有的一种函数,没有名字,只能使用一次,一般在函数体只有一句代码且只有一个返回值时,可用匿名函数来简化

语法格式:result=lamada 参数列表:表达式  (result直接得到表达式的返回值)

例如,以下两种函数的写法是相当的:

def calc(a, b):return a+bprint(calc(1,2))s=lambda a, b: a+b
print(type(s))print(s(10, 20))
# 输出结果
# 3
# <class 'function'>
# 30

内置函数

下面介绍一些Python自带的内置函数。

1、类型转换函数

函数名称描述说明
bool(obj)获取指定对象obj的布尔值

str(obj)

将指定对象obj转成字符串类型

int(x)

将x转成int类型
float(x)将x转成float类型
list(sequence)将序列转成列表类型
tuple(sequence)将序列转成元组类型
set(sequence)将序列转成集合类型

2、数学函数

函数名称描述说明

abs(x)

获取x的绝对值
divmod(x,y)

获取x与y的商和余数

max(sequence)获取sequence的最大值
min(sequence)获取sequence的最小值
sum(iter)对可迭代对象进行求和运算
pow(x,y)获取x的y次幂
round(x,d)对x进行保留d位小数,结果四舍五入

3、迭代器操作函数

常见的可迭代对象有:字符串、列表、元组

函数名称操作说明
sorted(iter)对可迭代对象进行排序
reversed(sequence)反转序列生成新的迭代器对象
zip(iter1,iter2)将iter1与iter2打包成元组并返回一个可迭代的zip对象
enumerate(iter)根据iter对象创建一个enumerate对象
all(iter)判断可迭代对象iter中所有元素的布尔值是否都为True
any(iter)判断可迭代对象iter中所有元素的布尔值是否都为False
next(iter)获取迭代器的下一个元素
filter(function,iter)通过指定条件过滤序列并返回一个迭代器对象(这里的function是一个函数)
map(function,iter)通过函数function对可迭代对象iter的操作返回一个迭代器对象

PS:迭代器对象的类型是 class 'List_reverseiterator

针对最后两个函数进行举例:

# 此函数对奇数返回True
def fun(num):return num % 2==1obj=filter(fun, range(10))
# filter将对1~9调用fun函数进行判断,为真则添加到迭代器对象中
print(list(obj))# 输出结果:[1, 3, 5, 7, 9]

下面这个函数实现转换大小写:

def upper(x):return x.upper()lst=['hello', 'world', 'Python']
obj2=map(upper, lst)
print(list(obj2))# 输出结果:['HELLO', 'WORLD', 'PYTHON']

4、其他函数

函数名称描述说明
format(value,format_spec)将value以format_spec格式显示
len(s)获取s的长度或s元素的个数
id(obj)获取对象的内存地址
type(x)获取x的数据类型
eval(s)执行s这个字符串所表示的Python代码

这里再详述一下第一种函数:

print(format(3.14, '20'))  # 数值默认右对齐
print(format('hello', '20'))  # 字符串默认左对齐
print(format('hello', '*>20'))  # *是填充符,<是左对齐,>是右对齐,20是显示宽度
print(format(3.1415926, '.2f'))
# 输出结果
#                 3.14
# hello               
# ***************hello
# 3.14

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数仓入门:数据分析模型、数仓建模、离线实时数仓、Lambda、Kappa、湖仓一体
  • 相机拍摄如何正确曝光
  • 3个功能强大的PDF转换工具,免费试用
  • 软件系统架构设计的“三高”
  • ORA-00911: invalid character
  • 动手学大模型应用开发笔记--用dash开发一个大模型知识库
  • 网络空间资产测绘:为安全防护“画出”实时“地图”
  • SPIFFS与LittleFS的对gz文件格式的区别
  • 静态IP代理和动态IP代理的区别
  • 使用ollama分别在我的window、mac、小米手机上部署体验llama3-8b(文末有福利)
  • C++——C++11
  • 【深度学习】VITS中的条件VAE,VAE的隐变量z为何要服从正太分布(2)
  • python == 与 is区别
  • 零基础入门转录组数据分析——机器学习算法之xgboost(筛选特征基因)
  • 返校季热度持续发酵,赛盈分销浅谈下半年选品趋势!
  • [Vue CLI 3] 配置解析之 css.extract
  • 【面试系列】之二:关于js原型
  • Android系统模拟器绘制实现概述
  • Angular数据绑定机制
  • eclipse的离线汉化
  • ES6 ...操作符
  • HashMap剖析之内部结构
  • JAVA 学习IO流
  • Javascript编码规范
  • Java新版本的开发已正式进入轨道,版本号18.3
  • nodejs调试方法
  • uva 10370 Above Average
  • webpack4 一点通
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 面试总结JavaScript篇
  • 栈实现走出迷宫(C++)
  • AI算硅基生命吗,为什么?
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • # 安徽锐锋科技IDMS系统简介
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (ros//EnvironmentVariables)ros环境变量
  • (二十三)Flask之高频面试点
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (力扣)1314.矩阵区域和
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (已解决)什么是vue导航守卫
  • (转)h264中avc和flv数据的解析
  • (转)linux 命令大全
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .net core Redis 使用有序集合实现延迟队列
  • .Net Core 中间件与过滤器
  • .NET Core引入性能分析引导优化
  • .NET Framework 3.5安装教程
  • .NET 表达式计算:Expression Evaluator