复习python函数

复习python函数

  • 1.对函数的理解
    • 函数的传递方式
    • 返回值 return
    • 可通过help()函数查看函数说明
    • 作用域
  • 2.不定长参数
  • 3.递归
  • 4.高阶函数
    • 将函数作为参数传递
    • 将函数作为返回值返回
  • 5.匿名函数
  • 6.装饰器

1.对函数的理解

函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用。

def fn():
	print('hello')
# 调用
fn()

函数的传递方式

(1)定义形参
可以为形参指定默认值

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

(2)实参的传递方式
实参可以传递任意类型的参数

  • 位置参数
fn(1,2,3)
  • 关键字参数
fn(a=5, b=6, c=7)
  • 混合使用关键字和位置参数,必须将位置参数写到前面
fn(1, 2,c=30)

返回值 return

def fn5():
    return 10
# fn5 和 fn5()区别
print(fn5)   # fn5是函数对象,打印fn5实际是在打印函数对象
print(fn5())   # fn5()是在调用函数,实际是打印函数的返回值 10

可通过help()函数查看函数说明

def fn(a:int, b:bool, c:str='hello')-> int:
    '''
    这是文档字符串实例
    :param a:整数参数
    :param b:布尔参数
    :param c:字符串参数
    :return:
    '''
    return 233

help(fn)

请添加图片描述

作用域

  • 全局变量
  • 局部变量
    如果希望在函数内修改全局变量,则需要使用global关键字来声明变量
a = 20
def fn3():
    global a
    a = 10
    print(a)  # 10

fn3()
print(a)   # 10

2.不定长参数

在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到所有的实参。
它将会将所有的实参保存到一个元组中。

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

*a会接受所有的位置实参,并且会将这些实参统一保存到一个元组中(装包)。

def fn(*a):
    print(a, type(a))

fn(1, 2, 3)

注意:带*的参数后的所有参数,必须以关键字参数的形式传递

def fn2(*, a, b, c):
    print(a, b, c)
fn2(a=1, b=2, c=3)

*形参只能接受位置参数,而不能接受关键字参数。
**形参可以接受其他关键字参数,它会将这些参数统一保存到一个字典中。
字典的key就是参数的名字,字典的vaLue就是参数的值。

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

结果:

a= {'a': 1, 'b': 2} <class 'dict'>

解包

# 参数的解包
def fn4(a, b, c):
    print(a, b, c)

# *对元组、列表解包
t = (10, 20, 30)
t = [10, 20, 30]
fn4(*t)   # 10,20,30

# **对字典解包
d = {'a':100,'b':200, 'c':300}
fn4(**d)   # 100,200,300

3.递归

递归式函数,在函数中自己调用自己。
递归式函数两个条件:
1.基线条件

  • 问题可以被分解为的最小问题,当满足基线条件时,递归就不在执行了

2.递归条件

  • 将问题继续分解的条件
# 求N!
def factorial(n):
    # 基线条件
    if n == 1:
        return 1

    # 递归条件
    return n * factorial(n-1)

# print(factorial(10))
# 创建一个函数,用来检查是否是回文字符串,如果是返回True,否则返回False
# 回文字符串,字符串从前往后念和从后往前念是一样的
def hui_wei(s):
    if len(s) < 2:
        return True
    elif s[0] != s[-1]:
        return False
    # 递归条件
    return hui_wei(s[1:-1])

print(hui_wei('ababa'))

4.高阶函数

高阶函数将函数作为参数传递
接收函数作为参数,或者将函数作为返回值的函数是高阶函数。

将函数作为参数传递

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]

def fn2(i):
    if i % 2 ==0:
        return True
    return False

def fn3(i):
    if i > 5:
        return True
    return False

# 将函数作为参数传递
def fn(func, l):
    # 创建一个列表
    list = []
    # 对列表进行筛选
    for n in l:
        if func(n):
            list.append(n)

    return list
print(fn(fn2, l))

将函数作为返回值返回

将函数作为返回值返回,也是一种高阶函数,也称为闭包。
通过闭包可以创建一些只有当前函数能访问的变量,也可以将私有数据藏在闭包中。
形成闭包条件:
1.函数嵌套
2.将内部函数作为返回值返回
3.内部函数必须要使用到外部函数的变量

def fn():
    a = 10
    # 函数内部再定义一个函数
    def inner():
        print('我是fn2', a)
    # 将内部函数 inner作为返回值返回
    return inner
fn()()

5.匿名函数

lambda函数表达式专门用来创建一些简单的函数,他是函数创建的又一种方式。
语法:lambda 参数列表:返回值

def fn(a, b):
    return a + b
# 等价于上面的函数
lambda a,b : a+b

# 运用场景
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# filter()方法不会把你的参数怎么样,但它像HR一样,决定你的去留
r = filter(lambda i: i < 5, l)
print(list(r))

# map()
# map()方法做逻辑运算(and or &)/运算符运算处理(+ - * /)
# 也就是map()一定会加工你的参数
# map()函数可以对可迭代对象中的所有元素做指定的操作,然后将其添加到一个新的对象中返回
r = map(lambda i : i**2, l)
print(list(r))

6.装饰器

通过装饰器,可以在不修改原来函数的情况下来对函数进行扩展。

def begin_end(old):
    """
    用来对其他函数进行扩展
    :param old: 要扩展的函数对象
    :return:
    """
    def new_function(*args, **kwargs):
        print("开始执行~")
        # 调用被扩展的函数
        result = old(*args, **kwargs)
        print('执行结束~')

    return new_function
@begin_end
def say_hello():
	print('大家好')
say_hello()

运行结果:
请添加图片描述

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

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

相关文章

前端Vue中async/await、promise 和setTimeout工作原理和执行顺序

前端Vue中async/await、Promise 和 setTimeout 在 JavaScript 中都是处理异步操作的方法&#xff0c;但它们的工作原理和执行顺序有所不同。以下是它们的执行顺序和关系的简要说明&#xff1a; 同步代码执行&#xff1a;在任何异步操作开始之前&#xff0c;首先会执行所有的同步…

vr太阳光参数怎么设置,vr快速渲染方法

VR场景中实现逼真的光照效果&#xff0c;太阳光参数的设置尤为关键。真实的太阳光可提升效果图的质感&#xff0c;论VR太阳光参数的设置技巧&#xff0c;包括光源类型选择、光照强度调整、阴影效果优化等多个方面&#xff0c;喜爱一起来看看vr太阳光真实感设置参数吧。 vr太阳光…

大数据信用风险竟然是这样形成的!查询方法也很简单

在大数据时代背景下&#xff0c;大数据信用风险成为了众多机构关注的焦点。这类风险涵盖了多头借贷、履约行为、联系人以及司法等多个方面。本文将深入解析大数据信用风险的形成原因及其查询方法&#xff0c;让我们一起来探索一下。 大数据信用风险主要表现在以下几个方面&…

Python-GEE遥感云大数据分析、管理与可视化

原文链接&#xff1a;Python-GEE遥感云大数据分析、管理与可视化https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601238&idx2&sn6b0557cf61451eaff65f025d648da869&chksmfa820db1cdf584a76de953b96519704177e6206d4ecd47a2f2fabbcac2f7ea619b0bce184…

Ubuntu镜像下载与安装2024.4版本(超适合新手)

前言&#xff1a; 在VMware中安装Ubuntu镜像&#xff0c;首先需要去下载镜像&#xff0c;但是由于服务器在国外&#xff0c;下载速度相对较慢&#xff0c;国内也有镜像&#xff0c;较推荐在国内镜像站下载&#xff0c;例如阿里镜像和清华镜像。 官网&#xff1a;Ubuntu系统下…

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第八套

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第八套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff09;获取&#xff08;WX:didadidadidida313&#xff0c…

hover显示播放遮罩层效果

我们都知道视频列表其实是一个封面列表,鼠标放上去时,有反馈:即hover时显示播放遮罩层,点击,跳转到对应的视频播放页。这是目前主流视频网站的一个通用效果。 我们在实现时应该理清思路: 1、每个视频位置处放的是封面图片 2、播放按钮遮罩层需完全覆盖封面图片,并且正…

vLLM-prefix浅析(System Prompt,大模型推理加速)

原文&#xff1a;vLLM-prefix浅析&#xff08;System Prompt&#xff0c;大模型推理加速&#xff09; 简介 本文浅析了在大模型推理加速方面一个非常优秀的项目 vLLM 的一个新特性 Prefix。在 Prompt 中有相同前缀时可以提高吞吐量降低延迟&#xff0c;换句话说可以省去这部分…

【做算法学数据结构】二叉树的层序遍历【二叉树】

文章目录 题目二叉树二叉树描述二叉树的java描述和前序遍历、后序遍历、中序遍历 题解总结以及二叉树应用场景 题目 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历…

德思特GNSS模拟器为物流行业保驾护航

作者介绍 一、前言 德思特GNSS模拟器能够在最短的时间内高效、准确的协助完成虹科MSR运输数据记录仪的定位准确性以及抗干扰能力测试&#xff0c;确保在运输或存储过程中&#xff0c;让用户知道何时何地发生了超出预设公差范围的事件&#xff0c;快速、准确的记录定位数据&…

【UE 材质】水波纹效果

效果 模拟雨水打落在水面上的效果 步骤 1. 下载所需纹理和纹理 纹理2. 新建一个材质&#xff0c;这里命名为“M_WaterRipples” 打开“M_WaterRipples”&#xff0c;添加一个纹理采样节点&#xff0c;纹理使用第一步下载的纹理 将纹理采样节点的R通道连接到基础颜色&#x…

李沐57_长短期记忆网络LSTM——自学笔记

LSTM 1.忘记门&#xff1a;将值朝着0减少 2.输入门&#xff1a;决定不是忽略掉输入数据 3.输出门&#xff1a;决定是不是使用隐状态 !pip install --upgrade d2l0.17.5 #d2l需要更新首先加载时光机器数据集。 import torch from torch import nn from d2l import torch a…

Ajax和axios基础

AJAX Asynchronous JavaScript And XML 异步的JavaScript和XML 作用 数据交换: 通过Ajax可以给服务器发送请求,服务器将数据直接响应回给浏览器. 异步交互: 可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术. 同步和异步 同步发送请求: 浏览器发…

阿斯达年代记账号注册教程 阿斯达年代记苹果id注册教程

阿斯达年代记账号注册教程 阿斯达年代记苹果id注册教程 即将开服的新款大型多人角色扮演类游戏阿斯达年代记三强争霸将于4月24号上线&#xff0c;小伙伴们可以在本次开服之后进行游戏&#xff0c;这款游戏除了常规的职业分化之外&#xff0c;目前开放了四种角色供玩家选择&…

getopt, getopt_long使用笔记

An element of argv that starts with - (and is not exactly "-" or "--") is an option element. The characters of this element (aside from the initial -) are option characters. 以-’开头的字符(注意!不是字符串!!)就是命令行参数选项 通…

C++中的程序流程结构

一、选择结构 1.1 if语句 作用&#xff1a;执行满足条件的语句 if语句的三种形式 单行格式if语句多行格式if语句多条件的if语句 #include <iostream> using namespace std;int main(){//选择结构 单行if语句//用户输入分数&#xff0c;如果分数>600,视为考上一本大…

代码随想录 Day19 字符串 | LC28 实现strStr() 【KMP经典题目】

六、实现strStr() 题目&#xff1a; 力扣28&#xff1a;找出字符串中第一个匹配的下标 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack…

全身照怎么缩小做头像?在线图片改大小尺寸的方法

在日常工作中&#xff0c;有不少人喜欢把自己的全身照作为微信或者QQ头像&#xff0c;这时候就经常遇到一个问题&#xff0c;就是图片尺寸太大&#xff0c;无法完整的展现&#xff0c;那么这个时候该怎么处理呢&#xff1f;可以试试下面介绍的这个在线图片改大小尺寸的方法&…

上位机图像处理和嵌入式模块部署(树莓派4b的一种固件部署方法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果软件开发好了之后&#xff0c;下面就是实施和部署。对于树莓派4b来说&#xff0c;部署其实就是烧录卡和拷贝文件。之前我们烧录卡&#xff0c;…

YashanDB连获多项权威认证

近期&#xff0c;YashanDB产品能力再获认可&#xff0c;顺利通过多项权威测试认证&#xff0c;包括通过《数据库政府采购需求标准(2023年版)》测评&#xff1b;通过国密检测机构测试&#xff0c;产品支持GB/T38636-2020《信息安全技术传输层密码协议(TLCP)》国标协议&#xff1…