Python学习基础笔记十四——函数参数

news2024/11/24 20:27:22

函数参数这块在前面的博客中没有展开,现在专门整理出来:

1、参数的数量:

1)没有参数:就是定义函数和调用函数的括号中都不写内容。

2)有一个参数:可以是任何数据类型。

3)有多个参数:例如位置参数。

2、位置参数:

概念:按照从左到右的顺序依次定义的参数,就称之为位置参数。

位置形参:在定义函数阶段,按照从左到右的顺序直接定义的“变量名”。必须被传值、多一个不行、少一个也不行。

位置实参:在函数调用阶段,按照从左到右的顺序依次传入的值。

例1:

def my_sum(a, b):    # 位置形参
    res = a + b
    return res


ret = my_sum(1, 2)   # 位置实参
print(ret)

3、关键字参数:

关键字实参:在函数调用阶段, 按照key=value的形式传入的值。就是指名道姓地给某个形参传值,可以完全不参照顺序。

例2:

def my_sum(a, b):
    res = a + b
    print('a: ', a)
    print('b: ', b)
    return res


ret = my_sum(b=1, a=2)

print(ret)

4、默认参数(默认形参): 在定义函数阶段,就已经被赋值的形参,称之为默认参数。在定义阶段,就被赋值,意味着在调用阶段就不用再为其赋值,也就是可以不传。

注意:所有位置参数必须出现在默认参数前,包括函数定义和调用。

例3:

def my_sum(a, b=7):    # b是默认参数,有默认值7
    res = a + b
    print('a: ', a)
    print('b: ', b)
    return res


ret = my_sum(1)        # 调用时,就不用再为b赋值了

print(ret)

5、位置形参和默认参数(默认形参)可以混合使用:

1、规则:位置形参必须位于默认形参的左边,但关键字参数之间是不存在先后顺序的。

例4:

def my_sum(a=7, b):   # 现在我将默认参数放在位置参数的前面,我们看看有什么报错?
    res = a + b
    print('a: ', a)
    print('b: ', b)
    return res


ret = my_sum(1)

print(ret)

结果截图:

我们看到这个语法错误的意思:非默认参数跟在默认参数之后。也就是说位置参数是在默认参数之后了,更进一步说默认参数写在位置参数前面了。

6、默认参数的值是在函数定义阶段赋值的,准确地说被赋予的是值的内存地址。

例5:

a = 7

def func(x, y=a):   # y 赋予的是7的内存地址
    print(x, y)

a = 8
func(1)

结果:

例6:

a = [1, 3]


def func(x, y=a):    # y 被赋予[1, 3]的内存地址
    print(x, y)


a.append(9)
func(1)

 结果:

7、默认值可以被指定为任意数据类型,但是最好不要使用可变类型,函数最理想的状态:函数的调用只跟函数本身有关系,不受外界代码的影响。

例7:

def func(x, y, z, l=None):
    if l is None:
        l = []
    l.append(x)
    l.append(y)
    l.append(z)
    print(l)


func(1, 2, 3)
func(11, 22, 33)
list_1 = [111, 222]
func(1, 2, 3, list_1)

8、可变参数:

定义函数的时候,我们不确定调用的时候会传递多少个参数(不传参也可以),此时,可用包裹packing位置参数或者包裹关键字参数,来进行参数传递,会显得非常方便。

8.1 包裹位置传递:

def my_sum(*args):
    sum = 0
    for i in args:
        sum = sum + i
    return sum


print(my_sum(1, 2))
print(my_sum(1, 2, 3))
print(my_sum(1, 2, 3, 4))

结果:

我们传递的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包位置传递。

如果将def my_sum(*args) 换成 def my_sum(*a) ,也是可以的,使用a来代替args。

之所以叫args,这种一种习惯:

我们再看一个例子:

def func(*args): # 站在形参的角度上,给变量加上*,就是组合传来的值。
    print(args)


func(1, 2, 3, 4, 5)

l = [1, 2, 3, 4, 5]
func(*l)    #站在实参的角度上,给一个序列加上*, 就是将这个序列按照顺序打散。

注意:两个星号的作用,有“组合”和“打散”的作用。

8.2 包裹关键字传递:

def func(**kwargs):
    print(kwargs)


print(func(a=1))
print(func(a=1, b=2, c=3))

kargs是一个字典(dict),搜集所有关键字参数。

那么可以将两者结合起来:

def func(*args, **kwargs):
    print(args, kwargs)


print(func(1, 2, 3, 4 = 'good', 5 = 'best')

我们再看一个例子:

def func(**kwargs):
    print(kwargs)


func(a=1, b=2)
d = {'a': 1, 'b': 2}
print(func(**d))

看看这个两个星号**的作用。也是“组合”和“打散”的作用。

9、解包裹参数:

*args和**kwargs, 也可以在函数调用的时候使用,称之为解包(unpacking)。

9.1 在传递元组的时候,让元组的每一个元素对应一个位置参数:

def print_hello(name, sex):
    print(name, sex)


args = ('tanggu', '男')
print_hello(*args)

2、在传递字典的时候,让字典的每个键值对作为一个关键字参数传递给函数。

def print_hello(**kwargs):
    print(kargs)


kargs = {'name': 'tanggu', 'sex': u'男'}

print_hello(**kwargs)

10、位置参数、默认参数和可变参数的混合使用:

10.1 规则:先位置参数、*args, 默认参数、**kwargs。

11、函数的注释:

11.1 可以给代码加行注释;

11.2 使用三引号,里面写函数的功能、参数说明和返回值说明。我们看下一个函数的注释:

 这是一个非常标准的函数注释。

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

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

相关文章

学习python中的数据结构

数据结构 链表和数组 数组 Python的list是由数组来实现的 有序的元素序列, 在内存中表现为一块连续的内存区域; 链表 通过指针将无序的列表链接起来, 每个节点都存储着当前节点的值和下一个节点的内存地址 链表和数组有什么区别? 实现有序的方式是不一样的, 数组是连续的内…

[附源码]SSM计算机毕业设计网上鞋店管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Pan-cancer image-based detection of clinically actionable genetic alternations

目录 摘要 前言 结果 深度学习模型优化 从组织病理图像预测泛癌基因突变 摘要 肿瘤的分子突变可导致肿瘤细胞及其微环境的表型变化。常规组织病理切片可以反映出这种形态学改变。本研究表明深度学习方法能直接从常规病理图像中推断出广泛的基因突变、肿瘤分子亚型、基因表达…

中纺集团×StarRocks:构建企业级数据资产管理的实践

中纺集团经过“十三五”信息化建设,生成了大量宝贵的数据资源,但也存在信息孤岛、系统壁垒、数据质量等问题。中纺结合企业实际需求,按照集团“十四五”信息化规划中有关数据中台的建设计划与目标要求,历经半年多的测试比选&#…

使用扩展有效对齐 SwiftUI 内容,创建自定义 SwiftUI 方法以快速对齐项目并使您的代码看起来简洁明了(教程含源码)

在开发 iOS 应用程序时,对齐内容可能是一个耗时的过程。如果应用程序有多个屏幕,则需要在不同的地方完成这件事,并可能导致看起来杂乱无章的视图。 作为一个始终致力于让我的代码看起来简单和流线型的人,实现目标所需的大量Spacer()元素常常让我恼火,这就是为什么当我发…

配置Nginx和其他应用的HTTPS访问

使用tomcat或者weblogic部署的应用默认都是http访问的,如果通过https访问,需要ssl证书。tomcat或者weblogic可以配置; 同时,另一种方法,https网站中,如果接口服务是http的,那么请求接口就会被拒…

[美国访问学者J1]签证的材料准备

对于美国访问学者J1签证材料的准备,在这里知识人网老师和大家分享一下: 1. 有效护照:如果您的护照将在距您预计抵美日期的六个月内过期、或已损坏、或护照上已无空白的签证签发页, 请在前来面谈之前先申请一本新护照。 2. DS-160表格确认页。…

vulnhub靶机darkhole

靶机下载地址:DarkHole: 1 ~ VulnHub Kali ip:192.168.174.128 靶机ip:192.168.174.135 靶机ip发现 sudo arp-scan -l 开放端口扫描 nmap -p- -sV -A 192.168.174.135 发现开启了22端口和80端口 目录扫描 gobuster dir -u http://192.168.174.135…

Seal库官方示例(一):bfv_basics.cpp解析

尽量理论来理解代码。 完整代码或者\native\examples里面 说到前面的话 两段官方的话 大致意思就是,这个库有门槛,需要先学会同态的概念,提供的例子必须要看要理解。必看的例子如下, 代码解析 基础加密 参数设置 三个核心…

flutter系列之:在flutter中使用流式布局

文章目录简介Flow和FlowDelegateFlow的应用总结简介 我们在开发web应用的时候,有时候为了适应浏览器大小的调整,需要动态对页面的组件进行位置的调整。这时候就会用到flow layout,也就是流式布局。 同样的,在flutter中也有流式布…

真题集P93---2017年计专真题

真题集P93---2017年计专真题六思路:模拟代码七思路一:哈希表法二:排序法 (利用排序去重)三:拓展代码(仅思路一)六 思路:模拟 1、接口介绍 int turnNum(int num[], int nums):拿来一…

数据库约束

约束概述 为什么需要约束 数据完整性(Data Integrity)是指数据的精准性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而…

种草软文怎么写?分享一些超实用的种草软文写作技巧。

一提起“种草”这个词语,想必很多小伙伴都不陌生,我们都有“被种草”的经历,指的就是把一件商品推荐给大家,分享给需要的人,然后促成销售转化的过程。 在一些主流的内容平台,比如知乎、小红书、得物、公众…

Android 9.0 MediaPlayer播放流程分析

1.MediaPlayer初始化流程 EventHandler是后面处理数据回调的handler. 在AudioFlinger.cpp中获取nextUniqueId: audio_unique_id_t AudioFlinger::nextUniqueId(audio_unique_id_use_t use) {// This is the internal API, so it is OK to assert on bad parameter.…

18-1、k8s 对外服务之ingress

一、什么是ingress 原来的项目是部署在一台电脑上的,这样爬取速度虽然很快,但是我们还能提升,联想到分布式的思想,我们是否可以通过多台电脑进行配合爬取,这样我们的爬取速度就能大幅度提升。 …

【Mysql】数据库的基本操作和表的增删改查

本章内容是,用sql语言实现对数据库的基本操作和表的基本操作 文章目录前言1. 数据库的基本操作1.1 创建数据库1.2 查看数据库1.3 选中数据库1.4 删除数据库2. 数据库基本数据类型3. 表的基本操作3.1 创建表3.2 显示数据库中的表3.3 查看表的构造3.4 删表4. 表的增删改查4.1 增加…

基于PHP+MySQL汽车查询系统的设计与实现

随着时代的发展,汽车已经逐渐成为人们代步的主要工具之一,按时因为工业的发展,汽车的品牌和型号也层出不穷,如此多的汽车信息如何能够让爱车人士更好的 汽车查询系统的主要功能包含:汽车的类别管理、汽车的信息管理、留言管理、用户的管理等。网站分为管理员、会员用…

开放与融合趋势下,工业互联网安全破圈之道

作者 | 伍杏玲 出品 | CSDN 在工业 4.0 和数字经济的发展促进下,工业互联网作为连接工业经济的重要要素,成为推动数字经济发展的重要基础设施。据统计,到 2025 年,全球 IoT 连接设备数量达 519 亿。 然而在 OT 和 IT 融合趋势下…

1721. 交换链表中的节点-仅遍历一次链表-考研满分答案

1721. 交换链表中的节点-仅遍历一次链表 给你链表的头节点 head 和一个整数 k 。 交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。 示例 1: 输入:head [1,2,3,4,5], k…

第1关:Hbase数据库的安装

在安装HBase之前你需要先安装Hadoop和Zookeeper,如果你还没有安装可以通过这两个实训来学习:Hadoop安装与配置,Zookeeper安装与配置。 本次实训的环境已经默认安装好了Hadoop,接下来我们就开始安装配置HBase吧。 HBase安装 HBas…