Python学习心得函数

一、函数的定义及调用

1.函数的定义:

函数的定义:函数是将一段能实现某种特定功能的代码,使用函数名进行封装,并通过函数名称进行调用。从而达到一次编写,多次调用的目的。

2.函数类型分为两类:

(1)内置函数:

输出函数:print()

输入函数:input()

列表定义函数:list()

(2)自定义函数:

def 函数名称(参数列表):
    函数体
    [return返回值列表]

注:函数名称是自己去定义的,参数列表里面有多个参数。

注:return不是必须需要的,可以省略不写。

3.函数调用:

函数名(参数列表)

注:通过函数名进行调用函数。

注:对函数的个个参数进行实际的赋值。

注:使用实际参数参与函数功能的实现。

 二、函数的参数传递

1.位置参数

(1)位置参数的定义:是指调用时的参数个数和顺序必须与定义的参数个数和顺序相同。

(2)位置参数的运用:

def happy_birthday(name,age):
    print('祝'+name+'生日快乐')
    print(str(age)+'生日快乐')

#调用
happy_birthday('wjl',18)

2.关键字参数:

(1)关键字参数的定义:是在函数调用时,使用”形参名称=值“的形式进行传参,传递参数可以与定义时的参数顺序不同。

(2)关键字参数的运用:

def happy_birthday(name,age):
    print('祝'+name+'生日快乐')
    print(str(age)+'生日快乐')

#关键字传参
happy_birthday(age=18,name='wjl')
#使用的关键字传参是打乱自定义函数中参数的顺序,但是参数的关键字还是和对应的数据类型相对应

happy_birthday('wjl',age=18)
#函数调用的过程中,位置传参和关键字传参是可以同时使用的。
#上面的两种传参方式的同时使用有个条件,就是必须位置传参在前,关键字传参在后。

注:使用的关键字传参是打乱自定义函数中参数的顺序,但是参数的关键字还是和对应的数据类型相对应。

注:函数调用的过程中,位置传参和关键字传参是可以同时使用的。

注:上面的两种传参方式的同时使用有个条件,就是必须位置传参在前,关键字传参在后。

3.默认值参数:

(1)默认值参数的定义:是在函数定义时,直接对形式参数进行赋值,在调用时如果该参数不传值,将使用默认值,如果该参数传值,则使用传递的值。

注:但是这里有一个输入参数的顺序,必须是按照函数定义时的顺序传递。

(2)默认值参数的运用:

def happy_birthday(name='wjl',age=18):
    print('祝'+name+'生日快乐')
    print(str(age)+'生日快乐')

#调用
happy_birthday()#不用传参
happy_birthday('ljw')#位置传参
happy_birthday(age=19)#关键字传参,name采用默认值

3.可变参数:

可变参数分为两种:

(1)个数可变的位置参数:在参数前加一颗星(*para),para为形式参数的名称,函数调用时可接收任意个数的实际参数,并放到一个元组中。

个数可变的位置参数的运用:

def fun(*para):
    print(type(para))
    for item in para:
        print(item)


#调用
fun(10,20,30,40)
fun(10)
fun(10,20)
fun([10,20,30,40])#实际上传的是一个参数
#在调用时,参数前加一颗星,分将列表进行解包
fun(*[11,22,33,44])

 注:个数可变的位置参数,就是可以输入多个值,将这些值一起输入到函数中,输入的这些参数都是元组类型。

注:将一个包含多个元素的列表作为实际参数输入,fun函数只能将其整体看作一个参数。但是可以使用解包,将其不被看做一个参数。

#在调用时,参数前加一颗星,分将列表进行解包
fun(*[11,22,33,44])

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

注:参数的类型是字典类型,输入参数的时候要使用关键字传参,得是赋值的形式,这也就与其类型相对应上了,因为参数输入到函数后的类型为字典型,传参结构与构建字典时的结构就很相似。

注:个数是可以发生改变的,所以可根据自己的情况进行输入。

 个数可变的关键字参数的运用:

#个数可变的关键字参数
def fun2(**kwpara):
    print(type(kwpara))
    for key,value in kwpara.items():
        print(key,'----',value)

#调用
fun2(name='wjl',age=19,weight=120)#关键字参数

如果上面传参为一个字典时,会出现异常,我们就需要对这个字典进行解包操作。

5.讨论有关参数的混合使用的几个问题:

关于参数这部分我们已经在前面提到过了,有些参数是可以同时使用的,比如在调用函数传递参数时,我们使用到了位置参数和关键字参数同时使用的情况。

前面遇到混合使用参数的情况有以下几种情况:
(1)在调用函数输入实际参数时,我们用到了位置参数和关键字参数的混合使用。

happy_birthday('wjl',age=18)
#函数调用的过程中,位置传参和关键字传参是可以同时使用的。
#上面的两种传参方式的同时使用有个条件,就是必须位置传参在前,关键字传参在后。

注:函数调用的过程中,位置传参和关键字传参是可以同时使用的。上面的两种传参方式的同时使用有个条件,就是必须位置传参在前,关键字传参在后。

在这个注意事项里为什么必须位置参数在前而关键字参数在后呢,这是因为定义函数时,我们把参数的顺序给定了下来,这个参数好比就是通道传递一样,这个只能是这个类型的参数,不能是其他的类型。我们在考虑起那面说的位置传参在前,关键字传参在后,就印证了上面的说法,因为前一个参数的类型是字符型而第二个参数类型是整型,如果这两参数顺序搞错的化,就会异常。

(2)在定义函数时,我们能将位置参数和默认参数一起使用。

def fun(a,b=20):
    pass

 但是使用时要注意的是位参在前而默认参在后。

def fun(a,b=20):
    pass

def fun(a=20,b):#报错了!
    pass
#a位置参数,b为默认值参数。
#在定义函数时,位置参数和默认值参数可以混合的使用。
# 但是必须是位置参数在前,默认值参数在后。

这个底层逻辑和我们刚才讨论的一样,也就是通道对应情况问题,这个未知参数和实际参数是一一对应的,不能将其顺序搞混了。再说回来为什么关键字可以交换顺序呢,这是因为它采用的是一种给参数赋值的形式针对性就在那,不用考虑对应问题。

三、函数的返回值

返回值的定义:如果函数的运行结果需要在其他的函数中运用的话,那么这个函数就应该被定义为带返回值的函数。

函数的运行结果使用return关键字进行返回。return可以出现在函数中的任意一个位置,用于结束函数。返回值可以是一个值,或多个值,如果返回的值是多个,结果是一个元组。

当返回值是一个的时候:

#函数的返回值
def calc(a,b):
    print(a+b)

calc(10,20)
print(calc(1,2))#None

def calc2(a,b):
    s=a+b
    return s

print('-'*10)
get_s=calc2(1,2)
print(get_s)

get_s2=calc2(calc2(1,2),3)
print(get_s2)

当返回值是为多个的时候:

注:返回值为多个的时候返回的是一个元组类型的值。如果想一个一个获得返回值的话需要进行解包操作。

def get_sum(num):
    s=0
    odd_sum=0#奇数和
    even_sum=0#偶数和
    for i in range(1,1+num):
        if i%2!=0:
            odd_sum+=i
        else:
            even_sum+=i
        s+=i
    return odd_sum,even_sum,s#三个值

result=get_sum(10)
#解包就值
a,b,c=get_sum(10)
print(a,b,c)

 四、变量的作用域

变量作用域的定义:指变量起作用的范围,根据作用的大小可分为局部变量和全局变量。

局部变量:

定义:在函数定义处的参数和函数内部定义的变量

作用范围:仅在函数内部,函数执行结束,局部变量的生命周期也结束

全局变量:

定义:在函数外定义的变量或函数内部使用global关键字修饰的变量

作用范围:在整个程序,程序运行结束,全局变量的生命周期才结束

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux操作系统--信号

目录 1.信号产生 概念: core vs Term 信号产生的5种条件 从软硬件理解信号的保存 软件,如何理解信号处理? 硬件中断 2、信号捕捉 3、信号阻塞 信号其他相关常见概念 1.信号产生 概念: 什么是信号?信号一种用…

太空飞船任务,生成一个地球发射、火星着陆以及下一次发射窗口返回地球的动画3D代码

import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from mpl_toolkits.mplot3d import Axes3D# 天体参数设置(简化模型) AU 1.5e8 # 天文单位(公里) earth_orbital_radius …

sql注入之python脚本进行时间盲注和布尔盲注

一、什么是时间盲注和布尔盲注? 答:时间盲注是攻击者通过构造恶意sql语句利用sleep()等延迟函数来观察数据库响应时间差异来进行推断信息和条件判断。如果条件为真,数据库会执行延时操作,如果为假则立即返回。响应时间较短。 SELE…

Python .py文件打包成.exe可执行程序,带托盘图标的可执行文件

Python .py文件打包成.exe可执行程序,带托盘图标的可执行文件 安装pyinstalle 查看是否安装了pyinstaller 已安装 C:\Users\Administrator>pip show pyinstaller Name: pyinstaller Version: 6.12.0 Summary: PyInstaller bundles a Python application and a…

可信数据空间 X 大模型,实践场景案例分享

近期,国家数据局发布《可信数据空间发展行动计划(2024—2028年)》,这是国家层面首次针对可信数据空间这一新型数据基础设施进行前瞻性的系统布局。可信数据空间,是一类全新的数据流通利用基础设施,同时也是…

Java-数据结构-(HashMap HashSet)

一、Tree和Hash的区别 在上一篇文章中,我们讲到了"TreeMap"和"TreeSet",但当我们刷题的时候却会发现,实际应用Map和Set时,却常常都只会用"HashMap"和"HashSet",这是为什么呢…

DeepSeek在linux下的安装部署与应用测试

结合上一篇文章,本篇文章主要讲述在Redhat linux环境下如何部署和使用DeepSeek大模型,主要包括ollama的安装配置、大模型的加载和应用测试。关于Open WebUI在docker的安装部署,Open WebUI官网也提供了完整的docker部署说明,大家可…

ShenNiusModularity项目源码学习(9:项目结构)

ShenNiusModularity源码主要有11个project(其实还有officialweb、test两个文件夹,大致有4、5个project,但看着跟主要项目代码没太大关系,暂时不管),这11个project的依赖关系如下图所示,其中最下…

用deepseek学大模型08-cnn残差网络

残差网络 参考:https://blog.csdn.net/2301_80750681/article/details/142882802 以下是使用PyTorch实现的三层残差网络示例,包含三个残差块和完整的网络结构: import torch import torch.nn as nnclass BasicBlock(nn.Module):expansion…

【C++】36.C++IO流

文章目录 1. C语言的输入与输出2. 流是什么3. CIO流3.1 C标准IO流3.2 C文件IO流 4. stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。pri…

#渗透测试#批量漏洞挖掘#Apache Log4j反序列化命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 Apache Log4j反序列化命令执行漏洞 一、…

JCRQ1河马算法+消融实验!HO-CNN-LSTM-Attention系列四模型多变量时序预测

JCRQ1河马算法消融实验!HO-CNN-LSTM-Attention系列四模型多变量时序预测 目录 JCRQ1河马算法消融实验!HO-CNN-LSTM-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于HO-CNN-LSTM-Attention、CNN-LSTM-Attent…

[STM32 - 野火] - - - 固件库学习笔记 - - - 十五.设置FLASH的读写保护及解除

一、选项字节与读写保护 1.1 为什么要设置读写保护 防止内部FLASH中的程序被非法读取。 在实际发布的产品中,STM32芯片的内部FLASH存储了控制程序。然而,如果不对内部FLASH采取任何保护措施,用户可以使用下载器直接读取其内容,并…

【算法与数据结构】字典树(Trie)详解

目录 一,字典树的定义 二,字典树的代码实现 完整代码详细注释: 测试用例测试结果: 三,处理其他字符 四,内存优化与扩展 1. 内存优化 2. 扩展功能 五,扩展功能支持通配符匹配 六&…

MySQL 之存储引擎(MySQL Storage Engine)

MySQL 之存储引擎 常见存储引擎及其特点 ‌InnoDB‌: ‌特点‌:支持事务处理、行级锁定、外键约束,使用聚簇索引,适合高并发读写和事务处理的场景‌。‌适用场景‌:需要高可靠性、高并发读写和事务处理的场景‌。 ‌M…

CXL ALMP(ARB/MUX Link Management Packet)理解

前言: ALMP(ARB/MUX Link Management Packet) 是CXL协议中由ARB/MUX层生成和处理的专用管理报文,用于协调链路电源状态切换(如L0s/L1)和虚拟链路状态机(vLSM)同步。以下是其核心特性…

002 SpringCloudAlibaba整合 - Feign远程调用、Loadbalancer负载均衡

前文地址: 001 SpringCloudAlibaba整合 - Nacos注册配置中心、Sentinel流控、Zipkin链路追踪、Admin监控 文章目录 8.Feign远程调用、loadbalancer负载均衡整合1.OpenFeign整合1.引入依赖2.启动类添加EnableFeignClients注解3.yml配置4.日志配置5.远程调用测试6.服务…

计算机网络(3)TCP格式/连接

1、TCP三大特点:面向连接、可靠、基于字节流 2、如何唯一确定一个TCP连接?TCP四元组:源地址、源端口、目的地址、目的端口 源地址和目标地址的字段(32 位)是在 IP 头部中,作用是通过 IP 协议发送报文给对方主机源端口和目标端口…

vscode远程报错:Remote host key has changed,...

重装了Ubuntu系统之后,由20.04改为22.04,再用vscode远程,就出现了以上报错。 亲测有效的办法 gedit ~/.ssh/known_hosts 打开这个配置文件 删掉与之匹配的那一行,不知道删哪一行的话,就打开第一行这个 /.ssh/confi…

无符号整数和带符号整数的相互转换

无符号字符数x转换为带符号字符数时,当时,转换后仍然为x;当时,转换后变为。 带符号字符数y转换为无符号字符数时,当时,转换后变为;当时,转换后仍然为y。 无符号整数和带符号整数的…