Python(五)-函数

news2024/9/29 20:37:41

目录

函数的定义与调用

特点

语法格式 

函数的参数

函数的返回值

函数嵌套调用

变量的作用域

局部变量

全局变量

函数的多种参数

位置参数

关键字参数

默认参数

可变参数


函数的定义与调用

python函数需要使用def关键字来定义,需要先定义,后调用

特点:

  • 先定义,后调用
  • 不调用,不执行
  • 调用一次,执行一次

语法格式 

# 定义函数

def 函数名():

        代码1

        ...

# 调用函数

函数名()

编写一个show()函数,并在函数中输出:bug虐我千百遍, 我待bug如初恋。

def show():
    print("bug虐我千百遍, 我待bug如初恋。")

show()

函数的参数

当在定义函数时,设定了参数,则可称该函数为:有参函数。反之,没有参数的函数,称为:无参函数。

(1)形参是指形式参数,表示在定义函数时的参数;

(2)实参是指实际参数,表示在调用函数时传递的参数值,具有实际意义。

有参函数

def 函数名(参数1,参数2,...):  # 形参
    代码1
    代码2
    ...

函数名(参数值1,参数值2,...)  # 实参

定义一个函数,用于求解两个数之和;

def sum_num(a,b):
    sum = a + b
    print(f"两个数的和:{sum}")

sum_num(2,4)  # 6
sum_num(7,4)  # 11

函数的返回值

函数的返回值指的是:当函数完成一件事情后,最后要返回给函数的结果。

def 函数名([参数1, 参数2, ...]):
    代码1
    代码2
    ...
    return 值

...

print(函数名(实参,实参,...))

:

(1)若要给函数返回结果,需要使用return关键字;

(2)return关键字的作用:把结果返回给函数;结束函数;

(3)当函数没有返回值时,默认返回None。

(1)定义一个函数1,用于求解两个数之积,并把积返回给函数;

(2)定义一个函数2,用于求解两个数的差、和,并同时返回给函数;

(3)定义一个函数3,输出:人生苦短,我用Python;

# 1.求解两个数的积
def func1(a,b):
    return a*b

print(func1(3,5))  # 15


# 2.求解两个数的差,和
def func2(x,y):
    return x-y,x+y

print(func2(8,5))  # (3,13)  输出的是一个元组


# 3.输出没有返回值
def show():
    print("人生苦短,我用Python。")

show() # 人生苦短,我用Python。
print(show())  # None

函数嵌套调用

def 函数1():
    代码
    ...

def 函数2():
    代码
    # 调用函数1
    函数1()
    ...

例1:

(1)先定义一个test()函数和func()函数;

(2)接着,在函数test()中,嵌套调用func()函数,并在外部调用test()函数;

(3)执行程序,观察效果;


# 1.定义func()
def func():
    print("==========AA===============")
    print("==========Nfunc()============")
    print("==========BB===============")

# 2.定义test()、调用func()
def test():
    print("*************11****************")
    func()
    print("**********M调用了test方法**************")
    print("*************22****************")

# 3.调用test()
test()   

例2:

(1)要完成一个输出任意条横线的需求;

(2)定义函数1:用于输出一条横线;

(3)定义函数2:先循环N次,再调用函数1,可输出N条横线;

def print_one_line():
    print("-"*40)

def print_lines(num):
    i = 0
    while i < num:
        print_one_line()
        i += 1

print_lines(10)

变量的作用域

局部变量

局部变量指的是:定义在函数内部的变量或参数,且只在函数中生效。

def 函数名(参数1,参数2,...):
    代码
    变量名 = 值
    ...

(1)定义一个函数1,有局部变量:参数;

(2)定义一个函数2,有局部变量:变量;

(3)调用函数,观察程序执行效果。

# 1.参数
def func1(a):
    print(f"a值为:{a}")

func1(2)



def func2():
    b=100  # 局部变量
    print(f"===========b的值 = {b}")

func2()
print(b) # 报错

全局变量

全局变量指的是:在函数体内、外都能生效的变量。

变量名 = 值

def 函数名():
    代码
    ...

注意:想要修改全局变量的值时,记得提前使用global进行声明.

# 声明
global 变量名
# 修改值
变量名 = 修改后的值

(1)定义一个全局变量1,并在函数内外都使用;

(2)定义一个同名的全局变量2和局部变量,并在函数内使用该同名变量;

# 1.定义全局变量
a = 100
print(a)

def func():
    print(f"输出的变量:{a}")

func()




# 3.定义同名变量
age = 18

def show():
    age = 34
    print(f"输出age的值为:{age}")

show()
print(f"age = {age}")

注意:当全局变量和局部变量设置的变量名相同,优先输出全局变量 

函数的多种参数

位置参数

调用函数时,根据函数定义的参数位置来传递数值。

def 函数名(参数1,参数2,...):
    代码
    ...

函数名(值1,值2,...)

(1)定义使用格式化符号替换数据,显示法名,技能,年龄

def show_info(name, skill, age):
    print("-" * 50)
    print("法名: %s"%name)
    print("技能: %s"%skill)
    print("年龄: %d"%age)
    print("-" * 50)

# 2 关键字参数 关注点: 值找到对应的参数名就可以, 跟顺序无关(参数多时 比较适合)
# show_info(skill="好色", age=888, name="八戒")
# show_info(age=888) # 报错: 缺少两个参数 name, skill

# 1 位置参数 关注点: 参数 个数, 类型, 顺序(缺点: 必须按照指定顺序来)
show_info("悟空", "七十二绝技", 666)
# show_info("悟空", 72, "666") # 报错: 需要整数, 传递的字符串, 类型不一致
# show_info("悟空") # 报错: 缺少参数

注意:如果参数的个数不够,或者类型不对,将会报错

关键字参数

调用函数时,可以通过【键 = 值】的形式指定参数。

def 函数名(参数1,参数2,...):
    代码
    ...

函数名(参数1=值, 参数2=值,...)

定义一个函数,用于显示个人名片的姓名、年龄、性别等信息;

# 1.定义显示个人信息的函数
def show_infos(name, age, sex):
    print("个人信息如下:")
    print(f"姓名:{name}")
    print(f"年龄:{age}")
    print(f"性别:{sex}")

# 2.调用
show_infos(age=24,name="张三",sex="女")
# show_infos(age=24,name="张三",gender="女")  # 报错

默认参数

在定义函数时,就为参数提供默认值。

def 函数名(参数1,参数2,...,参数n=值):
    代码
    ...

函数名(值1,值2,...[值n])

定义一个显示姓名,电话,密码的函数,且默认性别为男;

def emp(name, phone, password="123456"):
    print("-" * 50)
    print(f"个人信息: name={name}, phone={phone}, password={password}")
    print("-" * 50)

# emp("悟空", "18612480001", password="baqi")
emp("八戒", "18612480001")

# 报错: 设置默认参数 必须参数的最后
# def emp(password="123456", name, phone):
#     print("-" * 50)
#     print(f"个人信息: name={name}, phone={phone}, password={password}")
#     print("-" * 50)

# 报错: 设置默认参数 必须参数的最后
# def emp(name="悟净", phone, password="123456"):
#     print("-" * 50)
#     print(f"个人信息: name={name}, phone={phone}, password={password}")
#     print("-" * 50)

 注意:定义默认参数必须放在最后的位置,并且打印时也不可以换位置

可变参数

可变参数也叫不定长参数,不定长参数用于在不确定调用函数时,要传递多少个参数的场景,当然也可以不传递参数。

而当要调用函数时,可以给*args传递位置参数,给**kwargs传递关键字参数,这样显得更加方便。

def 函数名(参数1,..,*args,**kwargs):
    代码
    ...
    
函数名(值1, 值2, 值3, ... 参数1=值, 参数2=值,...)

(1)定义函数1,使用不定长参数*args求多个数之和;

(2)定义函数2,使用不定长参数**kwargs求多个数之和;

(3)综合两个函数,合并在一起完成求多个数之和;

# 1.通过*args求和
def num1(*args):
    print(args)
    sum1 = 0
    for i in args:
        sum1 += i
    print(f"多个数之和为:{sum1}")

num1(1,2)  # 3
num1(1,2,9)  # 12
num1(1,2,9,11)  # 23



# 2.通过**kwargs之和
def num2(**kwargs):
    print(kwargs)
    sum2 = 0
    for i in kwargs.values():
        sum2 += i
    print(f"多个数之和为:{sum2}")

num2(a=1,b=2)  # 3
num2(a=1,b=2,c=4)  # 7
num2(a=1,b=2,c=3,d=9)  # 15


# 3.结合
def num3(*args,**kwargs):
    result = 0
    sum1 = 0
    for i in args:
        sum1 += i
    sum2 = 0
    for i in kwargs.values():
        sum2 += i
    result = sum1 + sum2
    print(f"多个数之和为:{result}")

num3(3, a=1, b=2, c=4)  # 10
num3(3,6, a=1, b=2, c=4)  # 16
num3(3,6, a=1, b=2, c=4,f=9)  # 25

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2177764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

课堂讨论:评价计算机性能的指标

**课堂讨论&#xff1a;评价计算机性能的指标** --- ### 课堂开始 **王老师**&#xff1a;同学们&#xff0c;今天我们来讨论如何评价计算机性能的指标。小明&#xff0c;你知道有哪些指标吗&#xff1f; **小明**&#xff1a;嗯...有吞吐率和响应时间吧&#xff1f;&#…

双链表的插入删除遍历

双链表的插入操作 双链表的删除操作 双链表的遍历操作

Watchdog Timers(WDT)

文章目录 1. 介绍2. Feature List3. 概述3.1. Safety Watchdog3.2. CPU Watchdog 4. 看门狗定时器功能5. Endinit Functions5.1 Password Access to WDTxCON05.1.1 Static Password5.1.2 Automatic Password Sequencing 5.2 Check Access to WDTxCON05.3 Modify Access to WDTx…

点餐小程序实战教程13餐桌管理

目录 1 创建数据源2 搭建管理后台3 生成餐桌码4 找到自己的appid和secret5 小程序里获取餐桌信息总结 我们上一篇介绍了点餐界面的菜品展示功能。现实中如果你去餐馆用餐&#xff0c;总是给餐桌贴一个二维码&#xff0c;服务员会告诉你扫码点餐。 扫码大家现在都已经非常熟练了…

“从零开始学排序:简单易懂的算法指南“

“一辈人有一辈人要做的事&#xff01;&#xff01;&#xff01;” 这一期的节目呢&#xff0c;是关于排序的内容&#xff0c;相信大家对此一定很熟悉吧&#xff01; 排序&#xff1a; 排序是将一组元素按照一定的规则或标准进行组织和排列的过程。 冒泡排序&#xff1a; 冒…

此连接非私人连接

当你手机浏览器输入网站打开提示“此连接非私人连接&#xff0c;此网站可能在冒充来窃取你的个人或财务信息。你应回到之前的页面”这是因为该网站的SSL数字证书到期导致&#xff0c;需要此网站的管理员重新申请数字证书替换之前的文件才可以实现。 注意&#xff1a;如果你不是…

Token: 数据库、存储系统和API安全的应用

一. Token Token是一种常见的计算机术语&#xff0c;它在不同的上下文中有不同的含义。在身份验证和授权的上下文中&#xff0c;Token通常指的是服务端生成的一串字符串&#xff0c;作为客户端进行请求的一个令牌。当用户登录后&#xff0c;服务器会生成一个Token并返回给客户…

【高阶数据结构】平衡二叉树(AVL)的删除和调整

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《高阶数据结构》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多《高阶数据结构》点击专栏链接查看&a…

记一次教学版内网渗透流程

信息收集 如果觉得文章写的不错可以共同交流 http://aertyxqdp1.target.yijinglab.com/dirsearch dirsearch -u "http://aertyxqdp1.target.yijinglab.com/"发现 http://aertyxqdp1.target.yijinglab.com/joomla/http://aertyxqdp1.target.yijinglab.com/phpMyA…

DialFRED基准:具有对话能力的具身智能Agent

目录 一、DialFRED数据集1.1 数据集规模与任务结构1.2 任务实例的构成1.3 人类标注的问答数据1.4 Oracle自动生成答案1.5 任务多样性与数据增强1.6 数据集的词汇多样性1.7 任务和环境的多样性 二、提问者-执行者框架2.1 框架概述2.2 提问者模型设计2.3 执行者模型设计2.4 强化学…

【读书笔记-《30天自制操作系统》-25】Day26

本篇仍然是围绕着命令行窗口做文章。首先优化命令行窗口的移动速度&#xff0c;然后增加多个命令行窗口功能。接着优化了命令行窗口的关闭&#xff0c;最后增加了两个命令start与ncst。 1. 优化命令行窗口移动速度 首先对命令行窗口的移动速度进行优化。主要的优化点有以下几…

WEB服务器——Tomcat

服务器是可以使用java完成编写&#xff0c;是可以接受页面发送的请求和响应数据给前端浏览器的&#xff0c;而在开发中真正用到的Web服务器&#xff0c;我们不会自己写的&#xff0c;都是使用目前比较流行的web服务器。 如&#xff1a;Tomcat 1. 简介 Tomcat 是一个开源的轻量…

二维数组的存放

今天我水的文章是二维数组的存放 二维数组的存放方式其实和一维数组没有区别&#xff0c;但如果想要更直观的了解&#xff0c;我们可以把它们的地址打印出来。 代码如下&#xff1a; #include <stdio.h> int main() {int arr[3][3];//二维数组&#xff0c;int数组类型…

【高效管理集合】并查集的实现与应用

文章目录 并查集的概念主要操作优化技术应用场景 并查集的实现基本框架并查集的主要接口总体代码 并查集的应用省份的数量等式方程的可满足性 总结 并查集的概念 并查集&#xff0c;也称为不相交集&#xff0c;是一种树形的数据结构&#xff0c;用于处理一些不相交集合的合并及…

ClickHouse | 查询

1 ALL 子句 2 ARRAY JOIN 使用别名 :在使用时可以为数组指定别名&#xff0c;数组元素可以通过此别名访问&#xff0c;但数组本身则通过原始名称访问 3 DISTINCT子句 DISTINCT不支持当包含有数组的列 4 FROM子句 FROM 子句指定从以下数据源中读取数据: 1.表 2.子…

建筑资质应该怎么选?

建筑资质是建筑企业承接工程项目的必备条件&#xff0c;它不仅关系到企业的市场竞争力&#xff0c;还直接影响到企业的经营效益。因此&#xff0c;选择适合自己企业的建筑资质至关重要。以下是一些选择建筑资质时需要考虑的关键因素&#xff1a; 1. 明确企业定位 首先&#x…

金融教育宣传月 | 平安养老险百色中心支公司开展金融知识“消保县域行”宣传活动

9月22日&#xff0c;平安养老险百色中心支公司积极落实国家金融监督管理总局关于开展金融教育宣传月活动的相关要求&#xff0c;联合平安人寿百色中心支公司共同组成了平安志愿者小队&#xff0c;走进百色市四塘镇百兰村开展了一场别开生面的金融消费者权益保护宣传活动。此次活…

如何给你的项目添加测试覆盖率徽章

看完我的测试教程之后&#xff0c;想必大家都能写出一个测试覆盖率极高的小项目了。测试覆盖率既然这么高&#xff0c;不秀一秀岂不是白瞎了&#xff0c;下面我们就来通过第三方服务来给你的项目加上测试覆盖率徽章&#xff0c;涉及到的内容有yaml配置&#xff0c;githubAction…

Vue下载pubsub-js中错误问题解决

错误&#xff1a; 解决方法&#xff1a; 执行&#xff1a; npm config set registry https://registry.npm.taobao.org我执行以上方法后安装成功

关于北斗卫星导航系统,你都了解多少?

北斗卫星导航系统&#xff08;简称“北斗系统”&#xff09;&#xff0c; 英文全称是&#xff1a;Beidou Navigation Satellite System&#xff08;简称&#xff1a;BDS&#xff09;&#xff0c; 研发 的 初衷 是中国着眼于国家安全和经济社会发展需要&#xff0c;选择自主研发…