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

(PYTHON)函数

函数的基本概念:

python中函数分为以下四种:

1,python内置函数:如abs,len,max,min;

2,标准库函数:通过import声明标准库,如:math,random,通过import声明引入;

3,第三方库:由社区提供,同样由import声明引入;

4,由函数自定义的函数;

函数的使用:

函数的定义与调用:

函数定义的语法格式如下:

def 函数名([参数列表]):函数体

注意:

1,多个参数使用‘,’隔开;

2,不要少了圆括号后的‘ :’;

3,函数体与def语句之间要保持一定的缩进;

4,无论显示声明与否,函数语句都会返回一个return值:

例如:

def dayin(a):print(a)print(dayin(a))

若输入:2,则输出结果为:2; None。即说明了在没有显示说明return值时,实际上会返回None值

ps:

函数帮助文档的书写:

帮助文档可以随时对于某一变量或是某一函数的作用进行说明(由自己撰写),其声名方式如下:

def shili(x):'''本代码作为解释说明的作用'''函数体

用shift + tab 唤出;

函数的参数:

1,默认值函数:

在声明函数时,可以为某些参数指定默认值,当没有传入对应的实参值时,该变量就会使用默认值

例如:

def babble(words, times = 1):print((words + " ") * times)
babble("hello",3)
babble("nihao")输出:
hello hello hello 
nihao

注意:默认值参数必须写在形参列表的右边

2,按名称传递参数:

可以指定某一个参数名进行传参,摆脱了顺序的限制:

def test(a, b):print(a + '=' + b)
test(a = "aa", b = "bb")
test(b = "bb", a = "aa")结果相同

 在print函数中按名称传参的例子:

若希望在输出的不同项之间用指定字符A相连,可以调用形式:

print(..., sep = "A")

若不希望在一次输出后换行,可以使用形式:

print(...., end = "")

 自动换行的实现:

for i in range(1, 10):print(i, end = ", " if i %3 != 0 else "\n")1, 2, 3
4, 5, 6
7, 8, 9

这里注意一个新的if else语句书写形式:

A if 条件1 else B

3,可变参数:

在定义函数的参数时,

使用带  *  的参数,意味着允许向函数传递可变数组的参数。调用函数时,自该参数后的所有参数都被收集为一个元组。例如:

def test(*a):for i in a:print("{:^4}".format(i), end = ' ')return len(a)
count = test('李白', '杜甫')
print("共{}人".format(count))输出:李白   杜甫  共2人

   使用带 ** 的参数,自该参数后的所有参数都被收集为字典

def test(**a):print(a)
test(group1 = 10, group2 = 20, group3 = 30)输出:{'group1': 10, 'group2': 20, 'group3': 30}

 若同时存在多个可变参数与默认值参数该怎么传参:

4,形参与实参的讨论:

单个数据类型与c++类似,不再赘述;

当实参是列表等可变对象时,形参实质上就是对该列表的直接引用,形参的改变之间反馈在实参列表上。

(ps:  列表,字典...... 均为可变对象; int, float, str(字符串),bool 类型均是不可变对象)

5,函数返回多个值:

可以采用直接返回一个元组,返回多个值:

例如:

def fun(a, b):return (a, b, a / b, a % b)
n1 = fun(6 ,4 )
print(n1)

 lambda函数:

定义:

lambda函数——匿名函数,是一种在同一行进行函数定义的方法。广泛用于需要函数对象作为参数或者函数比较简单且只是用一次的场合。

定义语法格式:

lambda 参数1, 参数2, ....: <函数语句>

实例:

输出负数:
f = lambda x: x < 0
lis = [1, -1, 2, 3, -2, -3]
for i in filter(f, lis):print(i)

 注意:这里的filter函数用于过滤序列,过滤掉不符合条件的元素。

            filter函数接受两个参数:第一个为判断函数,第二个是序列

也可以简化为:

lis = [1, -1, 2, 3, -2, -3]
for i in filter(lambda x: x < 0, lis):print(i)

利用lambda对字典元素按值或按键排序:

若未提前说明:则默认视作字符串,通过字典序比较大小:
sorted(dict_data.items())按照值比大小
sorted(dict_data.items(), key = lambda x: x[1])  按值与10的余数比大小:
sorted(dict_data.items(), key = lambda x: x[1] % 10) 按照列表中元素的长度比大小:
sorted(dict_data.items(), key = lambda x: len(x))

变量的作用域:

两种最基本的变量作用域是局部变量和全局变量。

全局变量:

变量在函数外命名。

局部优先原则:

在局部变量与全局变量同名时,优先使用局部变量。

注意:若要强制声明为全局变量,则应加上global,声明后面出现的同名局部变量即是全局变量

递归函数 的调用:

声明好边界——即具体return值;

例如递归方法求最大公约数:

def gcd(a, b):if b == 0: return aelse : return gcd( b, a % b)  %%这一步相当于自动完成了较大数与较小数的交换print(gcd(12, 24))

实例运用:

补充:

zip函数的使用:将对应元素打包成一个个元组,然后返回由这些元组组成的对象

zip([1, 2, 3], ['a', 'b', 'c'])输出结果为 (1, ‘a’),(2, 'b'),(3, 'c')

相反的,将匹配后的结果再给zip函数,则会返回拆开后的两个列表

统计文章词频:

def gettext(text):   ##除去特殊符号和字母统一小写text = text.lower()for ch in ",.;?=:\'":text = text.replace(ch, " ")return textdef wordfreq(text):words = text.split()  ##split默认以空格和换行符为间隔分割元素counts = {}for word in words:count[word] = counts.get(word, 0) +1excludes = {'the','and','to','of','a','be'}   ##去掉无意义单词for word in excludes:del(counts[word])items = list(counts.items())items.sort(key = lambda x: x[1], reverse = True)return items[:topn]

http://www.xdnf.cn/news/2009.html

相关文章:

  • 多物理场耦合低温等离子体装置求解器PASSKEy2
  • uniapp小程序开发入门01-快速搭建一个空白的项目并预览它
  • 多模态(3):实战 GPT-4o 视频理解
  • 线上图书借阅小程序源码介绍
  • 系统测试的技术要求
  • 基于Docker的Flask项目部署完整指南
  • 基于C#+Unity实现遇见李白小游戏
  • 《强势量价关系》速读笔记
  • 【信息系统项目管理师】高分论文:论人力资源管理与成本管理(医院信息系统)
  • 【Python数据分析】Pandas模块之pd.concat 函数
  • 【Agent】LangManus深度解析:AI自动化框架的对比与langgraph原理
  • openwrt查询网关的命令
  • Flink部署与应用——部署方式介绍
  • 更智能的银行体验:生成式 AI 与语义搜索的实际应用
  • windows服务器及网络:搭建FTP服务器
  • 【AIGC】基础篇:VS Code 配置 Python 命令行参数调试debug超详细教程
  • DeepSeek 赋能全流程数据治理:构建智能化数据价值链
  • vue3中的effectScope有什么作用,如何使用?如何自动清理
  • 传感器模块有助于加速嵌入式视觉开发
  • 最新大模型算法的研究进展与应用探索
  • SIEMENS PLC程序解读 -BLKMOV (指定长度数据批量传输)
  • 六、web自动化测试02
  • 0基础 | Proteus仿真 | 51单片机 | 继电器
  • BitNet: 微软开源的 1-bit 大模型推理框架
  • 2024 年:Kubernetes 包管理的新前沿
  • CDGP|金融业数据价值迎来加速释放:数据治理策略该如何调整?
  • windows作业job介绍
  • springmvc-拦截器
  • 语音合成之六端到端TTS模型的演进
  • 【视频时刻检索】Text-Video Retrieval via Multi-Modal Hypergraph Networks 论文阅读