python中define函数_Python中的函数

2023-05-16

函数基础

01. 函数的快速体验

1.1 快速体验

所谓函数,就是把 具有独立功能的代码块组织为一个小模块,在需要的时候 调用

函数的使用包含两个步骤:

定义函数 —— 封装独立的功能

调用函数 —— 享受 封装的成果

函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的 重用

演练步骤

新建 04_函数项目

复制之前完成的 乘法表文件

修改文件,增加函数定义 multiple_table():

新建另外一个文件,使用 import导入并且调用函数

02. 函数基本使用

2.1 函数的定义

定义函数的格式如下:

def 函数名():

函数封装的代码

……

def是英文 define的缩写

函数名称应该能够表达 函数封装代码的功能,方便后续的调用

函数名称的命名应该 符合标识符的命名规则

可以由 字母、下划线和 数字组成

不能以数字开头

不能与关键字重名

2.2 函数调用

调用函数很简单的,通过 函数名()即可完成对函数的调用

2.3 第一个函数演练

name = "小明"

#解释器知道这里定义了一个函数

defsay_hello():print("hello 1")print("hello 2")print("hello 3")print(name)#只有在调用函数时,之前定义的函数才会被执行#函数执行完成之后,会重新回到之前的程序中,继续执行后续的代码

say_hello()print(name)

2.4 PyCharm 的调试工具

F8 Step Over可以单步执行代码,会把函数调用看作是一行代码直接执行

F7 Step Into可以单步执行代码,如果是函数,会进入函数内部

2.5 函数的文档注释

在开发中,如果希望给函数添加注释,应该在 定义函数的下方,使用 连续的三对引号

在 连续的三对引号之间编写对函数的说明文字

在 函数调用位置,使用快捷键 CTRL + Q可以查看函数的说明信息

注意:因为 函数体相对比较独立,函数定义的上方,应该和其他代码(包括注释)保留 两个空行

03. 函数的参数

演练需求

开发一个 sum_2_num的函数

函数能够实现 两个数字的求和功能

演练代码如下:

defsum_2_num():

num1= 10num2= 20result= num1 +num2print("%d + %d = %d" %(num1, num2, result))

sum_2_num()

3.1 函数参数的使用

在函数名的后面的小括号内部填写 参数

多个参数之间使用 ,分隔

defsum_2_num(num1, num2):

result= num1 +num2print("%d + %d = %d" %(num1, num2, result))

sum_2_num(50, 20)

3.2 参数的作用

函数,把 具有独立功能的代码块组织为一个小模块,在需要的时候 调用

函数的参数,增加函数的 通用性,针对 相同的数据处理逻辑,能够 适应更多的数据

在函数 内部,把参数当做 变量使用,进行需要的数据处理

函数调用时,按照函数定义的参数顺序,把 希望在函数内部处理的数据,通过参数传递

#定义一个函数#定义形参时,可以为形参指定默认值#指定了默认值以后,如果用户传递了参数则默认值没有任何作用#如果用户没有传递,则默认值就会生效

def fn(a = 5 , b = 10 , c = 20):print('a =',a)print('b =',b)print('c =',c)

fn(1 , 2 , 3)

fn(1 , 2)

fn()

3.3 形参和实参

形参:定义函数时,小括号中的参数,是用来接收参数用的,在函数内部 作为变量使用

实参:调用函数时,小括号中的参数,是用来把数据传递到 函数内部用的

def fn4(a):

# 在函数中对形参进行重新赋值,不会影响其他的变量

# a = 20

# a是一个列表,尝试修改列表中的元素

# 如果形参执行的是一个对象,当我们通过形参去修改对象时

# 会影响到所有指向该对象的变量

a[0] = 30

print('a =',a,id(a))

c = 10

c = [1,2,3]

fn4(c)

fn4(c.copy())

fn4(c[:])

print('c =',c,id(c))

3.4 不定长参数

#不定长的参数#定义一个函数,可以求任意个数字的和

def sum(*nums):#定义一个变量,来保存结果

result =0#遍历元组,并将元组中的数进行累加

for n innums :

result+=nprint(result)

sum(123,456,789,10,20,30,40)

#带星号的形参只能有一个#带星号的参数,可以和其他参数配合使用#第一个参数给a,第二个参数给b,剩下的都保存到c的元组中

def fn21(a,b,*c):print('a =',a)print('b =',b)print('c =',c)#可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递#第一个参数给a,剩下的位置参数给b的元组,c必须使用关键字参数

def fn22(a,*b,c):print('a =',a)print('b =',b)print('c =',c)#所有的位置参数都给a,b和c必须使用关键字参数

def fn23(*a,b,c):print('a =',a)print('b =',b)print('c =',c)#如果在形参的开头直接写一个*,则要求我们的所有的参数必须以关键字参数的形式传递

def fn24(*,a,b,c):print('a =',a)print('b =',b)print('c =',c)

fn21(1,2,3,4,5,6)

fn22(1,2,3,4,5,c=6)

fn23(1,2,3,4,b=5,c=6)

fn24(a=1,c=2,b=3)

E:\Py\Scripts\python.exe E:/PyWorkSpace/venv/ccc.py

a= 1b= 2c= (3, 4, 5, 6)

a= 1b= (2, 3, 4, 5)

c= 6a= (1, 2, 3, 4)

b= 5c= 6a= 1b= 3c= 2Process finished with exit code 0

#**形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中#字典的key就是参数的名字,字典的value就是参数的值#**形参只能有一个,并且必须写在所有参数的最后

def fn3(b,c,**a) :print('a =',a,type(a))print('b =',b)print('c =',c)

fn3(b=1,d=2,c=3,e=10,f=20)

#参数的解包(拆包)

deffn4(a,b,c):print('a =',a)print('b =',b)print('c =',c)#创建一个元组

t = (10,20,30)#传递实参时,也可以在序列类型的参数前添加星号,这样他会自动将序列中的元素依次作为参数传递#这里要求序列中元素的个数必须和形参的个数的一致

fn4(*t)#创建一个字典

d = {'a':100,'b':200,'c':300}#通过 **来对一个字典进行解包操作

fn4(**d)

04. 函数的返回值

在程序开发中,有时候,会希望 一个函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理

返回值是函数 完成工作后,最后给调用者的 一个结果

在函数中使用 return关键字可以返回结果

调用函数一方,可以 使用变量来 接收函数的返回结果

注意:return表示返回,后续的代码都不会被执行

defsum_2_num(num1, num2):"""对两个数字的求和"""

return num1 +num2#调用函数,并使用 result 变量接收计算结果

result = sum_2_num(10, 20)print("计算结果是 %d" % result)

deffn4():for i in range(5):if i == 3:#break 用来退出当前循环

#continue 用来跳过当次循环

return #return 用来结束函数

print(i)print('循环执行完毕!')

05. 函数的嵌套调用

一个函数里面 又调用了 另外一个函数,这就是 函数嵌套调用

如果函数 test2中,调用了另外一个函数 test1

那么执行到调用 test1函数时,会先把函数 test1中的任务都执行完

才会回到 test2中调用函数 test1的位置,继续执行后续的代码

deftest1():

​print("*" * 50)print("test 1")print("*" * 50)

​deftest2():

​print("-" * 50)print("test 2")

test1()print("-" * 50)

test2()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中define函数_Python中的函数 的相关文章

  • 使用 pip 或 conda 来管理包? [复制]

    这个问题在这里已经有答案了 我已经使用 matlab 进行机器学习很长一段时间了 最 近切换到 python 并使用其包管理器 pip 安装某些包并成功安装了许多包 几天前 我开始使用 conda 我以前安装的所有软件包都被覆盖 我真的很想
  • 如何在 Python 中使这个随机文本生成器更加高效?

    我正在研究一个随机文本生成器 不使用马尔可夫链 目前它的工作没有太多问题 首先 这是我的代码流程 输入一个句子作为输入 这称为触发字符串 被分配给一个变量 获取触发字符串中最长的单词 在所有古腾堡计划数据库中搜索包含该单词的句子 无论大写还
  • 每月第 n 天运行 APScheduler 作业

    我正在寻找一个 APScheduler 触发器 它将在每月的第 n 天执行一项作业 例如 我想在每个月的第一个星期二运行一个作业 或者每个月的第一个和第三个周一 有没有人有一个触发器可以实现这一点 你可以almost使用 cron 调度程序
  • Django - 未找到“”的反向。 '' 不是有效的视图函数或模式名称

    我正在研究我的课程项目 但现在我完全陷入困境 我正在创建一个网站通过 PayPal 销售产品 但 PayPal 退货 取消页面未正确呈现 我已经按照课程中的示例检查了代码一百次 但显然我遗漏了一些东西 当我转到产品 单击 立即购买 登录 P
  • 为什么 Python zipfile 不提供与命令行 zip 相同的输出 .zip 文件大小?

    这是生成的文件的大小zip seq 10000 gt 1 txt zip 1 1 txt adding 1 txt deflated 54 ls og 1 zip rw r r 1 22762 Aug 29 10 04 1 zip 这是一个
  • 有没有纯Python的表类?

    我正在构建一个需要分析表格数据的应用程序 我想执行一些列操作 例如重命名列 删除列以及根据现有列的值计算新列的能力 我的第一选择是 Pandas 之类的东西 但是一个限制是这个项目必须是跨平台的并且非常容易在 virtualenv 中部署
  • python:如何检查一行是否为空行

    试图弄清楚如何编写一个 if 循环来检查一行是否为空 该文件有许多字符串 其中之一是一个空行 用于与其他语句分隔开 不是 我认为是一个回车符后面跟着另一个回车符 new statement asdasdasd asdasdasdasd ne
  • Redis 队列工作程序在 utcparse 中崩溃

    我正在尝试按照以下教程获得基本的 rq 工作 https blog miguelgrinberg com post the flask mega tutorial part xxii background jobs https blog m
  • Flask-admin 内联建模传递表单参数会抛出 AttributeError

    Flask 开发者们大家好 在 Flask admin 中 我目前尝试在模型视图中实现内联模型编辑 在模型方面 我有一个简单的树结构 表示一组内容页面 每个节点都有多个子节点以及与其关联的多个内容数据模型 模型被命名为ContentNode
  • 使用 Numpy 与 einsum 和 tensordot 进行相同的操作

    假设我有两个 3D 数组A and B形状的 3 4 N and 4 3 N 我可以计算沿第三轴的切片之间的点积 with einsum np eisum ikl kjl gt ijl A B 是否可以执行相同的操作numpy tensor
  • pandas dataframe 对列进行排序会引发索引上的 keyerror

    我有以下数据框 df peaklatency snr 0 52 99 0 0 1 54 15 62 000000 2 54 12 82 000000 3 54 64 52 000000 4 54 57 42 000000 5 54 13 7
  • Dataframe unstack 性能 - pandas

    我正在尝试拆开数据框 它工作正常 但问题是我正在处理 CSV 文件中的巨大数据集 约 10 亿 这是示例数据集 236539 48512569874 Name Danny 236539 48512569874 Class 12 236539
  • 创建 Pyomo 约束的性能

    我正在用 pyomo 设置一个更大的能量优化问题 正如其他中提到的 设置花费了不合理的时间问题 https stackoverflow com questions 43413067 performance of pyomo to gener
  • 如何在pandas中分组后从每组中选择前n行? [复制]

    这个问题在这里已经有答案了 我有一个具有以下形状的 pandas 数据框 open year open month type col1 col2 我想找到每个 年 月 中的顶级类型 所以我首先找到每个 年 月 中每种类型的计数 freq d
  • 函数内部变量的赋值会改变外部的赋值 - Python

    我从使用 Matlab 转向使用 Python 使用函数时的变量赋值让我感到困惑 我有一个代码如下 a 1 1 1 def keeps x y x y 1 2 return y def changes x y x y 1 2 return
  • 将 scipy 稀疏矩阵的几行采样到另一个中

    如何对 scipy 稀疏矩阵的某些行进行采样 并从这些采样的行中形成一个新的 scipy 稀疏矩阵 例如 如果我有一个 10 行的 scipy 稀疏矩阵 A 并且我想创建一个新的 scipy 稀疏矩阵 B 其中 A 的第 1 3 4 行 该
  • 如何从 Django 中的链接设置预定义的表单值?

    我的项目是这样布局的 1 page has many categories 2 category belongs to page has many items 3 item belongs to category 当我进入一个页面时 我想修
  • 使用 Python 3.x 基本获取 URL 的 HTML 正文

    我是Python新手 我对 Python 2 x 中的旧 urllib 和 urllib2 与 Python 3 中的新 urllib 之间的差异有点困惑 除此之外 我不确定数据在发送到 urlopen 之前何时需要编码 我一直在尝试使用
  • pandas - 组合行的字符串

    我有一个像这样的数据框 id text 1 DM HTN Enlarged prostate 2 hypertensive and on regular treatment 2 LBP 3 DM HTN Enlarged prostate
  • Python 单元测试:Nose 失败时重试?

    我有一个随机失败的测试 我想让它在发送错误消息之前重试多次 我将 python 与 Nose 一起使用 我写了以下内容 但不幸的是 即使使用 try except 处理 当第一次尝试测试失败时 Nose 也会返回错误 def test so

随机推荐