Python(13)-函数,lambda语句

函数

  • 1 函数定义
  • 2 函数调用
  • 3 函数注释文档
  • 4 函数参数
    • 4.1 参数列表,默认参数,任意参数
      • 4.1.1 无缺省值参数
      • 4.1.2(部分)缺省值参数
      • 4.1.3 数量不定形参数
    • 4.2 可变对象和不可变对象
    • 4.3 作用域
      • 4.3.1 globals()函数
      • 4.3.2 global 声明变量为全局变量
  • 5 函数返回值
    • 5.1返回单个值
    • 5.2返回多个值
  • 6 函数的嵌套调用
  • 7 函数的递归
  • 8 lambda语句

函数:有独立功能的代码块,组织(封装)成为小模块,有需要的时候调用。

自己编写第三方库:封装,修改功能代码块,增加函数定义,在其他程序中导入自己写的函数,来使用函数中的功能。

1 函数定义

定义一个函数的语法:

def 函数名():

函数封装的代码

def test1():

print(‘hello world’)

函数中变量的命名规则与变量命名的规则相同

2 函数调用

定义好一个函数之后只是表明封装了一段代码,如果不调用函数函数是无法主动执行的。在函数名之后加一个小括号就能够完成函数调用工作。

带参数函数调用: 在函数名后按照定义变量的顺序依次填写实际要计算的参数。

Python不能在函数定义之前用函数名调用函数

3 函数注释文档

给Python中的函数添加注释 函数上方保留两个空行,函数的注释在函数定义下方第一行,三个引号,填写注释内容。
在这里插入图片描述
在这里插入图片描述
在函数调用出:View-》quick document快速文档(ctrl+q)->查看函数的注释说明信息。
在这里插入图片描述
在pycharm 文档注释解释函数功能基础上,要求同时显示参数说明
文档注释的模板:在“”“后面写 函数作用,在每个参数后写参数的含义
在这里插入图片描述
在这里插入图片描述

4 函数参数

参数:函数内部需要处理函数外部数据时,可以通过参数传递
函数的参数用以增加函数的通用性。

函数的参数类型:形参和实参
定义函数时的参数:形参,告诉使用者,要传两个参数,在函数内部当变量使用。
调用函数时的参数:实参,实实在在的参数。

示例函数:Sum_2_num() -实现两个数字求和,把需要计算的数字,通过参数的形式传递给函数。在括号里填写参数,多个参数之间用逗号分隔。
在这里插入图片描述

4.1 参数列表,默认参数,任意参数

4.1.1 无缺省值参数

def sum_2_num(num1,num2):…

4.1.2(部分)缺省值参数

(参数带默认值)

def sum_2_num(num1,num2=1):…

函数定义时,给参数设定默认值,当函数有外部参数传入时,使用传入的实参,没有参数传入时使用缺省值
好处: 简化常用情况下的参数传递
使用情况: 常见的值设为参数的默认值,不传递参数就能会调用默认值

定义参数的缺省值:在参数名后面加=加默认值就可以了。在指定缺省参数的默认值时,应该使用最常见的值作为默认值

注意事项:
a).定义位置:缺省参数应该放在参数列表的末尾,
b).调用多个缺省参数的函数:利用变量名=变量值来传递参数,避免传递位置错误

gl_list=[6,3,9]
#默认按升序排序,日常升序多
#gl_list.sort()
#如果需要降序排列,要指定reverse参数
gl_list.sort(reverse=True)
print(gl_list)

4.1.3 数量不定形参数

一个函数需要处理的参数个数是不确定的,这个时候可以使用多值参数来定义该函数。
多值参数好处:调用函数会比较方便。两种方式定义多值参数的方法:
a).参数名前面+*
b).参数名前面+**

*args
**kwargs

def sum_numbers(num1, *numbers):print(num1, numbers)        # 1 (2, 3, 4)s = num1for val in numbers:s += valprint(s)                    # s = 10sum_numbers(1,2,3,4)

使用元组和字典传递数量不定的参数,拆包操作

def demo(*args,**kwargs):print(args)print(kwargs)gl_nums=(1,2,3)
gl_dict={"name":"xiaoming","age":18}demo(gl_nums,gl_dict)
#输出:
#((1, 2, 3), {'age': 18, 'name': 'xiaoming'})
#{}#拆包,
demo(*gl_nums,**gl_dict)
#等价于
demo(1,2,3,name="xiaoming",age=18)

注意:在函数中,参数在使用前必须被赋值。

4.2 可变对象和不可变对象

python 中的所有对象分为可变对象和不可变对象。所谓可变对象指的是,对象的内容可变,而不可变对象的内容不可变化。

不可变对象数值类型,字符串,元组
可变对象字典,列表

Python 参数都是对对象引用。如果在函数内部,尝试修改不可变对象,程序会在函数中生成新的对象,函数外被引用的对象则不会被改变。

1.函数内部,使用赋值语句操作不可变类型的实参,不会改变函数外的相对应的参数值

def demo(num,num_list):print("内部的代码")# 函数内部,对参数的赋值语句num = 100num_list=[1,2,3]print(num)print(num_list)print("函数执行完成")
gl_num=99
gl_list=[4,5,6]
demo(gl_num,gl_list)
print(gl_num)
print(gl_list)

输出

内部的代码
100
[1, 2, 3]
函数执行完成
99
[4, 5, 6]

2.函数内部,使用赋值语句操作可变类型的实参,会改变函数外的相对应的参数值

def changeable(list):list[0] = 2print(list)
lis = [1, 2, 3]
print(lis)
changeable(lis)
print(lis)

输出:

[1, 2, 3]
[2, 2, 3]
[2, 2, 3]

3.在函数内部使用可变类型的数据的方法,会改变外部实参。

def demo(num_list):print("函数内部的代码")#使用方法修改列表的内容,在函数内部使用方法是没有智能提示的num_list.append(9)print(num_list)print("函数执行完成")
gl_list=[1,2,3]
demo(gl_list)
print(gl_list)

输出:

函数内部的代码
[1, 2, 3, 9]
函数执行完成
[1, 2, 3, 9]

4.列表使用+=本质上是调用extend方法:可以把另外一个列表的内容加到当前列表下。

数字、字符串,使用+=先相加再赋值,列表+=会改变函数外面的变量:

def demo(num,num_list):print("函数开始")# num=num+num,不会改变外面实参num+=num# 调用方法,会改变外面是实参num_list+=num_listprint(num)print(num_list)print("函数完成")gl_num=9
gl_list=[1,2,3]
demo(gl_num,gl_list)print(gl_num)
print(gl_list)

使用等价的语句则不会:

def demo(num,num_list):print("函数开始")# num=num+num,不会改变外面实参num+=num# 赋值语句,不会改变外面实参#num_list=num_list+num_listprint(num)print(num_list)print("函数完成")

4.3 作用域

python在创建、改变、查找变量名时都是在命名空间中进行的,即在相应的作用域下进行的。Python不能声明变量,当变量初始化处就决定了这个变量存在于哪个作用域中。

默认情况下:函数中定义局部变量,主程序中定义全局变量。函数内部可以使用全局变量。

4.3.1 globals()函数

在函数内部,也可以使用globals函数访问全局变量。

x = 1
def print_x():x = 2print(globals()["x"])print(x)
print_x()

输出

1
2

4.3.2 global 声明变量为全局变量

def defin_gx():global gx     # 注意啦注意啦,下面使用的gx 使用的是全局变量哈gx = 3 
gx = 1
defin_gx()
print(gx)

输出

3

5 函数返回值

一个函数执行结束后,告诉调用者执行的结果。使用 return关键字返回执行结果,可以使用一个变量来接受返回的结果。
在这里插入图片描述
在return语句后的函数语句是无法到达的,所以,return语句应该作为函数的最后一句话
在这里插入图片描述

5.1返回单个值

return num

5.2返回多个值

返回多个结果(函数返回当前的温度和湿度)

def measure():#测量温度和湿度print("测量开始")temp=39wetness=50print("测量结束")# 元组-可以多个数据,因此可以使用元组让函数一次性返回多个值# 如果返回的数据类型是元组,小括号可以省略,否则有小括号提示#return (temp,wetness)return temp,wetness#元组。从元组中拿到单独的数据
result=measure()
#需要拿到温度和湿度,
print(result[0])
print(result[1])#如果函数返回的类型是元组,同时希望单独处理元组中的元素
#可以使用多个变量,一次性接受函数 的返回值
#注意使用多个变量接受结果时,变量的个数应该和元组中元素的个数保持一致
gl_temp,gl_wetness=measure()
print(gl_temp)
print(gl_wetness)

6 函数的嵌套调用

一个函数中嵌套另外一个函数

 
def test1():print('1' * 50)def test2():print("-" * 50)test1()print("+" * 50)test2()

**温馨提示:**项目出现新的需求时,不要急着改变已经测试好的程序,另求他法,尽可能不要在原有的函数或者模块中改动,因为要求可能还会变回去。

7 函数的递归

一个函数数的递归:自己调用自己
特点:
1.要传入参数,是会根据参数的不同做不同处理,
2.递归一定要有一个出口,没有出口会出现死循环

递归执行流程:每次递归调用的核心就是处理的参数会改变。
案例演练:接收数字num,完成1+2+num用递归完成。遍历整个文件目录,递归算法编写出来的十分有效果

def sum_num(num):# 出口if num==1:return 1# 数字累加#假设sum_number能够完成1...num-1之间的累加temp=sum_num(num-1)return num+tempresult=sum_num(5)
print(result)

8 lambda语句

lambda用于创建匿名函数。对于一些抽象的、不会在其他地方复用的函数,可以使用lambda语句使代码变得精简。

# lambda表达式
g = lambda x : x + 1
print(g(1))

冒号左边是函数的参数,有多个参数使用逗号分割开。
冒号右边是返回值,只能有一个返回值,包含实际计算操作

注意lambda语句只有一个返回值一个表达式,不能含有命令。

demo: lambda语句实现任意底数的函数

from math import log
def make_logarithmic_function(base):return lambda x:log(x, base)
my_lf = make_logarithmic_function(base=3)print(my_lf(9))

输出

2.0

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

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

相关文章

深度学习(08)-- Residual Network (ResNet)

文章目录目录1.残差网络基础1.1基本概念1.2VGG19、ResNet34结构图1.3 梯度弥散和网络退化1.4 残差块变体1.5 ResNet模型变体1.6 Residual Network补充1.7 1*1卷积核(补充)2.残差网络介绍(何凯明)3.ResNet-50(Ng)3.1 非常深的神经网…

redis——命令请求的执行过程

发送命令请求 当用户在客户端中键入一个命令请求时, 客户端会将这个命令请求转换成协议格式, 然后通过连接到服务器的套接字, 将协议格式的命令请求发送给服务器。 读取命令请求 当客户端与服务器之间的连接套接字因为客户端的写入而变得可…

深度学习(09)-- DenseNet

文章目录目录1.DenseNet网络结构2.稠密连接及其优点3.代码实现4.补充说明目录 1.DenseNet网络结构 2.稠密连接及其优点 每层以之前层的输出为输入,对于有L层的传统网络,一共有L个连接,对于DenseNet,则有L*(L1)/2。 这篇论文主要…

redis——缓存击穿/穿透/雪崩

缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就去后端系统查找(比如DB)。 一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透…

python(15)-window7配置iPython

前提:安装了Pythonanaconda anaconda安装参考:https://www.zhihu.com/question/58033789 在window系统下可以使用两种方法来实现类似与于Linux终端命令运行程序的方法(推荐方式2): 1.cmd:自己没有操作过,可以参考下面…

深度学习(10)-- Capsules Networks(CapsNet)

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/malele4th/article/details/79430464 </div><div id"content_views" class"markdown_views"><!-- flowchart 箭头图标 勿删 --&g…

手把手maven的功能/安装/使用/idea集成

看这篇文章不用着急安装&#xff0c;跟着步骤一定会成功&#xff0c;要理解maven是什么&#xff0c;如何使用。 介绍 maven官网 对于一个小白来说&#xff0c;官网有用的信息就是这些 不管如何介绍maven&#xff0c;作为使用者来说&#xff0c;主要感觉两个方面有帮助&#x…

python(16)-列表list,for循环

高级数据类型--列表1列表定义2列表中取值3列表的增&#xff0c;删&#xff0c;查&#xff0c;改3.1修改指定位置的数据3.2确定指定元素的索引3.3增加操作3.4删除操作3.5 元素是否存在与列表中 in3.6在指定索引位置插入元素4列表的数据统计5列表排序6列表的循环遍历-for7多维度l…

深度学习(11)-- GAN

TensorFlow &#xff08;GAN&#xff09; 目录 TensorFlow &#xff08;GAN&#xff09;目录1、GAN1.1 常见神经网络形式1.2 生成网络1.3 新手画家 & 新手鉴赏家1.4 GAN网络1.5 例子 1、GAN 今天我们会来说说现在最流行的一种生成网络, 叫做 GAN, 又称生成对抗网络, 也…

redis——数据结构和对象的使用介绍

redis官网 微软写的windows下的redis 我们下载第一个 额案后基本一路默认就行了 安装后&#xff0c;服务自动启动&#xff0c;以后也不用自动启动。 出现这个表示我们连接上了。 redis命令参考链接 String 字符串结构 struct sdshdr{//记录buf数组中已使用字节的数量int …

Python模块(1)-Argparse 简易使用教程

argparse 简易使用教程1.概况2. action3. argparse 使用demo3.1 argparse 实现加法器3.2 D-Model parser1.概况 argparse是Python中用于解析命令行参数的一个模块&#xff0c;可以自动生成help和usage信息&#xff1b;当从终端输入的参数无效时&#xff0c;模块会输出提示信息…

redis——NOSQL及redis概述

NoSql入门概述 单机Mysql的美好时代 瓶颈&#xff1a; 数据库总大小一台机器硬盘内存放不下数据的索引&#xff08;B tree&#xff09;一个机器的运行内存放不下访问量&#xff08;读写混合&#xff09;一个实例不能承受Memcached&#xff08;缓存&#xff09; MySql 垂直拆…

Python(17)-元组tuple

高级数据类型--元组1.元组的定义2.元组基本操作3.元组的循环遍历4.元组的应用场景5.元组与格式化字符串6.元组与列表之间的转换元组的最大特征就是可访问不可改&#xff0c;可作为字典的键值&#xff0c;因为键值必须是唯一的。字符串也是不可边类型&#xff0c;因此也适合做字…

深度学习(莫烦 神经网络 lecture 3) Keras

神经网络 & Keras 目录 神经网络 & Keras目录1、Keras简介1.1 科普: 人工神经网络 VS 生物神经网络1.2 什么是神经网络 (Neural Network)1.3 神经网络 梯度下降1.4 科普: 神经网络的黑盒不黑1.5 Why Keras?1.6 兼容 backend 2、如何搭建各种神经网络2.1 Regressor回归…

阿里Java编程规约(集合)

【强制】关于 hashCode 和 equals 的处理&#xff0c;遵循如下规则&#xff1a; 1&#xff09; 只要覆写 equals&#xff0c;就必须覆写 hashCode。 2&#xff09; 因为 Set 存储的是不重复的对象&#xff0c;依据 hashCode 和 equals 进行判断&#xff0c;所以 Set 存储的对…

Pytorch(3)-数据载入接口:Dataloader、datasets

pytorch数据载入1.数据载入概况Dataloader 是啥2.支持的三类数据集2.1 torchvision.datasets.xxx2.2 torchvision.datasets.ImageFolder2.3 写自己的数据类&#xff0c;读入定制化数据2.3.1 数据类的编写map-style范式iterable-style 范式2.3.2 DataLoader 导入数据类1.数据载入…

大数据学习(5)-- NoSQL数据库

文章目录目录1.NoSQL的介绍2.NoSQL产生的原因2.1 web2.02.2 NoSQL兴起原因3.NoSQL和关系数据库的区别4.NoSQL的四大类型4.1 键值数据库4.2 列族数据库4.3 文档数据库4.4 图形数据库4.5 不同类型的NoSQL数据库进行比较5.NoSQL的三大基石5.1 CAP5.2 base5.3 最终一致性6.从NoSQL到…

经典算法重点总结

文章目录排序算法冒泡排序直接插入排序希尔排序直接选择排序快速排序堆排序归并排序总结查找算法顺序查找二分查找插值查找斐波那契查找树表查找分块查找哈希查找总结排序算法 冒泡排序 void bubbleSort(int a[] , int n){for(int i n-1 ; i > 0 ; i--){for(int j 0 ; j …

redis——HyperLogLog

HyperLogLog 是一种概率数据结构&#xff0c;用来估算数据的基数。数据集可以是网站访客的 IP 地址&#xff0c;E-mail 邮箱或者用户 ID。 基数就是指一个集合中不同值的数目&#xff0c;比如 a, b, c, d 的基数就是 4&#xff0c;a, b, c, d, a 的基数还是 4。虽然 a 出现两次…

机器学习知识总结系列-机器学习中的优化算法总结(1-4)

文章目录1.梯度下降1.1批量梯度下降(BGD)1.2随机梯度下降&#xff08;SGD&#xff09;1.3 小批量随机梯度下降&#xff08;MSGD&#xff09;1.4 比较&#xff1a;1.5 动量算法&#xff08;momentum&#xff09;1.6 Nestrov Momentum2. 自适应方法2.1 自适应学习率算法&#xff…