python基础八:函数

2023-11-03

1、函数简介

1.1语法

# 语法
# def 函数名([形参1,形参2,形参3....]):
#     代码块
#函数名()调用函数

1.2介绍

函数是个对象(function)
函数用来保存一些可执行的代码,在你需要的时候可以对这些语句进行多次调用,函数中保存的代码不会立即执行,需要调用函数的时候代码才执行
fn是函数对象 fn()调用函数
print是函数对象 print()调用函数

2、函数的参数

2.1形式参数

在定义函数的时候,可以在函数后面的括号里面定义数量不等的形参
多个形参要以 ,隔开,形参也叫形式参数,定义形参就相当于在函数内部声明了变量,但是并没有赋值

def s(a,b):
    a = None#内部声明,但不赋值
    b = None#内部声明,但不赋值
    print(a + b)
s()

2.2实际参数

如果函数在定义的时候,指定了形参,那么在调用函数的时也必须传递形参实参将会赋值给对应的形参,有几个形参就得传几个实参
实参可以传递任意类型的对象:数字、字符串、列表、元组、字典、集合

2.3函数的传递方式

定义形参时,可以为形参指定默认值。指定了默认值以后,如果用户传递了参数则默认值不会生效。如果用户没有传递,则默认值就会生效,如果为函数中的形参进行赋值,则不会影响其他的变量

def function(a,b=60):#a= 20 b= 30
    # b = 60  #a= 20 b= 60
    print('a=',a,'b=',b)
function(20,30)

位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递
混合使用位置参数和关键字参数的时候必须将位置参数写到关键字参数前面去

3、不定长参数

①在定义函数的时候,可以在形参的前面加上一个* 这样这个形参将会获取到所有的实参它会将这些实参保存到一个元祖当中
②带星号的参数是可以和其他参数配合使用的,但是注意带星号的参数只能放在最后一个
③形参可以接收其他关键字参数,它会将这些参数统一保存到一个字典当中
字典的key就是参数的名字,字典的value就是参数的值
④形参也只能有一个,并且必须写在所有参数的后面
(*args:位置参数,定义函数时不知传多少参数就用它,它可以接受0或多个参数 **kwargs:关键字参数定义函数时不知传多少关键字参数就用它,它可以接受0或多个关键字参数)

4、参数的解包

传递实参时,也可以在序列类型的参数前添加星号,这样它会自动的将序列中元素依次作为参数传递
li = (1,2,3) a,b,c = li print(b)
要求序列中的元素的个数必须和形参的个数一致

5、函数的返回值

返回值就是函数执行以后返回的结果
通过return来指定函数的返回值
return后面可以跟任意对象,返回值甚至可以是一个函数
fn是函数对象 打印fn就是在打印函数对象
fn()调用函数 打印fn()实际上我就是在打印fn()的返回值
print是函数对象 print()调用函数
在函数中,return后的代码都不会执行,retrun一旦执行函数自动结束

6、文档字符串

help()是Python中内置函数,通过help()函数可以查询Python中函数的用法
在定义函数时,可以在函数内部编写文档字符串,文档字符串就是对函数的说明
当我们编写了文档字符串时,就可以通过help()函数来查看函数的说明

def fn(a:bool,b:int,c:str)-> int:
    '''
    这是一个文档字符串的示例
    这个函数的作用.......
    函数的参数
    :param a: 作用 类型 默认值...
    :param b: 作用 类型 默认值...
    :param c: 作用 类型 默认值...
    :return:  需要/不需要
    '''
    return 123
help(fn)

7、函数的作用域

作用域指的是变量生效的区域

7.1全局作用域

全局作用域在程序执行时创建,在程序执行结束时销毁
所有函数以外的区域都是全局作用域
在全局作用域中定义的变量,都是全局变量,全局变量可以在程序的任意位置进行访问

7.2局部作用域(函数作用域)

函数作用域在函数调用时创建,在调用结束时销毁
函数每调用一次就会产生一个新的函数作用域
在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问

8、命名空间

命名空间实际上就是一个字典,是一个专门用来存储变量的字典
locals()用来获取当前作用域的命名空间
如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间
返回值是一个字典
向scope里面添加了一个key-value
scope[‘c’] = 789
print( c )打印的是c的value(全局变量下可以使用,局部变量下不可以使用)

9 、递归函数

递归是解决问题的一种方式,它的整体思想,是将一个大问题分解为一个个的小问题,直到问题无法分解时,在去解决问题
递归式函数有2个条件

  1. 基线条件: 问题可以被分解为最小问题,当满足基线条件时,递归就不执行了
  2. 递归条件: 可以将问题继续分解的条件
    例如: 定义一个函数来实现任意数的阶乘
# 定义一个函数来实现任意数的阶乘
def fn(i):
    if i==1:
        return i
    return i*fn(i-1)
print(fn(10))#3628800
# 验证结果是不是正确的
n=10
for m in range(1,10):
    n *= m
print(n)#3628800

10、高阶函数

①接收一个或多个函数作为参数
fn2就是接受了一个参数的高阶函数

def fn1(x):
	return x*x
li = [1,2,3,4]
def fn2(func, li):
	li1 = []
	for i in li:
		 li1.append(fn1(i))
	return li1

②将函数作为返回值
fn就是将函数作为返回值的高阶函数

li = [1,2,3,4,5,6]
def fn(li):
	return lambda x:x%2==1
print(list(filter(fn,li)))

只要满足任意一条就可以叫做高阶函数

11、闭包

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

def make_fn():
    nums2 = []
    def fn1(n):
        nums2.append(n)
        return sum(nums2) / len(nums2)
    return fn1
res = make_fn()
print(res(10))  # 10.0
print(res(5))  # 7.5

12、匿名函数

①匿名函数 lambda函数表达式
lambda函数表达式就是专门用来创建一些简单的函数,函数可以提高复用性,但是一些简单的功能没必要创建函数复杂化,用匿名函数,用完就销毁,简单方便不占内存
语法:lambda 参数列表 : 返回值
②filter()过滤函数的使用
参数 1 函数 2 需要过滤的序列(可迭代的) 返回值 过滤后的新的序列(可迭代的结构)
例如过滤列表中的奇数(匿名函数常配合过滤函数使用)

li = [1,2,3,4,5,6,7,8,9]
print(list(filter(lambda x:x%2==1,li)))

13、装饰器

要对函数进行装饰的时候我们可以通过修改函数中的代码来完成这个需求,但是会产生一些问题
问题一 如果要修改的函数过多,修改起来比较麻烦
问题二 不方便后期的维护
问题三 违反开闭原则(ocp) 程序的设计思想 要求开发对程序的扩展,要关闭对程序的修改

import time
# 设计一个函数计算程序运行的时间,如果每个函数都写一样的
# 功能太麻烦,为了避免重复造轮子,就使用引用的方式
def fn1(func):
    start = time.time()
    func()
    time.sleep(2)
    end = time.time()
    print(f'spend {end - start}')
def demo1():
    print('i am demo1')
def demo2():
    print('i am demo2')
fn1(demo1)  # 如果函数名变了还要修改函数名才能实现相关功能,为了OCP原则还得继续改进,往下看

通过装饰器,可以在不修改原来函数的情况下来对函数进行扩展在开发中,我们都是通过装饰器来扩展函数的功能的(装饰器只有满足闭包才可以实现,不管函数有没有被调用,装饰器都会在装饰,有几个语法糖就会装饰几次,在函数调用前就被装饰了)

import time
# 设计一个函数计算程序运行的时间,如果每个函数都写一样的
# 功能太麻烦,为了避免重复造轮子,就使用引用的方式
def fn1(func):
    start = time.time()
    func()
    time.sleep(2)
    end = time.time()
    print(f'spend {end - start}')
@fn1
def demo1():
    print('i am demo1')
def demo2():
    print('i am demo2')
demo1()  # @就是一个语法糖,用fn1去装饰demo1那么调用的时候就相当于把fn1上面的功能加到了demo1上,这样即使demo1变了,fn1也有对应的功能
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python基础八:函数 的相关文章

  • LSTM的输入格式和输出个数说明

    前言 最近使用LSTM 神经网络进行预测的时候 突然发现对其输入输出不是很清晰 照着大佬们的改改还行 不能深入了解 有点难受呀 下面简单介绍一下 讨论 转换为LSTM的3D格式 samples time steps feature samp
  • python ADF检验

    前言 本文对ADF检验进行研究 python示例代码 不对概念进行分析介绍 Code import numpy as np import matplotlib pyplot as plt from statsmodels tsa statt
  • python基础十一:异常处理以及文件操作

    1 异常 1 1异常简介 程序在运行过程中可能会出现一些错误 比如 使用了不存在的索引 两个不同类型的数据相加 这些错误我们称之为异常 处理异常 程序运行时出现异常 目的并不是让我们的程序直接终止 Python是希望在出现异常时 我们可以编
  • Python——UDP Socket实现视频互传,远程调用另一台电脑摄像头(cv2)

    一台电脑当服务器多线程提供摄像头服务 支持多台电脑调用 目录 一台电脑当服务器多线程提供摄像头服务 支持多台电脑调用 一 效果展示 和舍友联机 多台电脑效果 二 带注释的代码 1 服务端 2 客户端 一 效果展示 和舍友联机 多台电脑效果
  • python进阶:线程、进程和协程

    前言 线程 进程和协程都是实现多任务 同一时间可以做多个事情就叫做多任务 的方法 并发 一段时间内做不同的事情 比如一个人吃饭喝水 吃的时候不能喝 喝的时候不能吃 只有在一段时间 吃了再喝或者喝了在吃 并行 同一时间做不同的事情 比如边听音
  • Python——模拟退火在背包问题上的运用(详细代码)

    一 模拟退火简介 二 详细代码 import math import random import matplotlib pyplot as plt def init population n 生成一个种群 个体为全排列的随机排列 popul
  • Numpy 向量化操作加速计算,解决向量外积求和慢的问题

    在计算函数二阶导的时候 我们通常需要计算Hessian 矩阵 此时会遇到向量外积求和的问题 i 1 n u i v i u i R n 1 v i R 1 n sum i 1 n u i v i u i in mathbb R n time
  • python进阶:python高级编程技巧(上)

    1 深入类和对象 1 1鸭子类型和多态 鸭子类型多态的概念是应用于Java和C 这一类强类型语言中 而Python崇尚 鸭子类型 动态语言调用实例方法时不检查类型 只要方法存在 参数正确 就可以调用 这就是动态语言的 鸭子类型 它并不要求严
  • Python学习基础系列----了解python

    了解python 1 了解Python Python是一种解释型 这意味着开发过程中没有了编译这个环节 面向对象 支持面向对象的风格或代码封装在对象的编程技术 动态数据类型的交互式 可在命令行中通过Python提示符及直接代码执行程序 高级
  • 双向LSTM 对航空乘客预测

    前言 1 LSTM 航空乘客预测 单步预测和多步预测 简单运用LSTM 模型进行预测分析 2 加入注意力机制的LSTM 对航空乘客预测采用了目前市面上比较流行的注意力机制 将两者进行结合预测 3 多层 LSTM 对航空乘客预测 简单运用多层
  • python基础八:函数

    1 函数简介 1 1语法 语法 def 函数名 形参1 形参2 形参3 代码块 函数名 调用函数 1 2介绍 函数是个对象 function 函数用来保存一些可执行的代码 在你需要的时候可以对这些语句进行多次调用 函数中保存的代码不会立即执
  • Django安装操作教程

    一 环境准备 确保已安装好python和pycharm工具 二 django安装并配置环境变量 方法一 cmd中命令安装 pip install i https pypi douban com simple django 或 指定相应的dj
  • 多台电脑环境下Python统一相同的库及对应版本

    工作时很容易遇到这种情况 就是公司电脑和个人电脑Python中对应的库的版本甚至种类不同 这样就可能导致用个人电脑编写的代码在公司电脑上跑不了 或者别的什么原因需要统一版本库 可以通过以下方式解决 当然有别的方式 例如Docker 首先 在
  • python进阶:python高级编程技巧(中)

    1 通过实例方法名字的字符串调用方法 getattr object name default None 得到一个对象中的name方法 如果没有则返回默认值 map func iterables 第一个传递函数名称 第二个传递一个可迭代的对象
  • python基础七:元组、字典、以及集合的使用

    1 元组简介 1 1元组的基本概念 元组表现形式tuple 元组是一个不可变序列 一般当我们希望数据不改变时 我们使用元组 其他情况下基本都用列表 使用 创建元素 元组不支持通过序列来修改元素 可以查找 元组不是空元组至少有一个 逗号 当元
  • Python——beautiful,requests,歌单(多线程)

    目录 一 定义三个函数方便之后调用 1 由url获取soup函数 2 传入soup 进具体信息进行解析 3 由图片链接保存到本地 二 生产 消费主模块 精华部分 1 获取一个分类下的所有歌单的id 相当于生产者 2 对每个id 获取歌单的详
  • python基础十:模块

    1 模块简介 模块化指将一个完整的程序分解成一个个的小模块 通过将模块组合 来搭建出一个完整的程序 模块化的优点 方便开发 方便维护 模块可以复用 2 模块的创建 在Python当中一个py文件就是一个模块 在一个模块中引入外部模块 imp
  • if 与elif

    if condition1 代码段1 if condition2 代码段2 else 代码段3 执行顺序 gt 进入if condition1 condition1 为true gt 执行 代码段1 gt 进入 if condition2
  • python中for循环的用法_谈谈对Python爬虫的理解

    不知从何时起 Python这门语言和爬虫就像一对恋人 二者如胶似漆 形影不离 你中有我 我中有你 一提起爬虫 就会想到Python 一说起Python 就会想到人工智能 和爬虫 所以 一般说爬虫的时候 大部分程序员潜意识里都会联想为Pyth
  • python基础六:列表

    1 序列 1 1基本概念 序列就是python中最基本的一种数据结构 用于保存一组有序的数据 所有的数据在序列当中都会有唯一的一个位置 索引 与之对应 并且序列会按照数据添加的顺序来分配索引 1 2序列的分类 可变序列 序列中的元素可以改变

随机推荐

  • 一图读懂FISCO BCOS MVP计划

    点击填写FISCO BCOS MVP申请表 问卷系统 了解更多干货内容 请关注FISCO BCOS开源社区公众号 访问FISCO BCOS代码仓库可下载项目所有源代码 https github com FISCO BCOS FISCO BC
  • 从连续时间傅里叶级数到快速傅里叶变换

    在计算机上编程做信号处理时 我们通常用的是FFT 但是开始学信号处理时 一般是从FS开始的 所以这里整理一下从FS到FFT 演变 的过程 以下是傅里叶 家族 的一些名称 FS Fourier Series 连续时间周期信号的傅里叶级数 FT
  • GET请求,接收多个对象参数

    非常简单 如下 GetMapping test public void test String name City city 省略 还没看懂 详细解释一下 例如City类有id describe字段 Data public class Ci
  • STM32F407写超声波传感器HC-SR04程序

    1 给超声波模块接入电源和地 2 给trig输入一个长为20us的高电平方波 3 输入方波后 模块会自动发射8个40KHz的声波 echo的电平会由0变为1 4 当超声波返回被模块接收到时 回波引 脚端的电平会由1变为0 定时器记下的这个时
  • 开发场景运维操作命令

    uname a 查看内核 操作系统 CPU信息的linux系统信息命令 head n 1 etc issue 查看操作系统版本 是数字1不是字母L cat proc cpuinfo 查看CPU信息的linux系统信息命令 hostname
  • 【gperftools】使用gperftools分析

    文章目录 使用gperftools分析 配置环境 Demo 使用gperftools分析 配置环境 perftools http code google com p gperftools downloads list libunwind h
  • 常用HTML标签属性

    跑马灯
  • python基础_包引入,OS模块和异常处理

    包引入 库 提供一系列的功能 1 内置库 包 不需要安装可以直接使用 安装路径在 Lip 2 第三方库 包 先pip安装在使用 安装路径在 Lip site packages 3 自定义的模块 包 有2种 a 同级目录 import 模块名
  • 「第六篇」对于电赛,我们应该看重什么?

    这几天更新了一些关于电赛的帖子 有设计方案 也有一些经验贴 大家可以在下面的链接找到 第一篇 大学生电子设计竞赛 等你来提问 第二篇 全国一等奖 经验帖 第三篇 全国电子设计竞赛 这些你必须知道的比赛细节 文末附上近十年电赛题目下载 第四篇
  • 【学习】对于AndroidStudio 中 Local History还原文件的理解

    1 理解结果 2 理解过程 2016年7月21日 星期四 因为很少使用AS的LocalHistory 所以对LocalHistory的不怎么理解 平时也就是拿来看看旧的代码 但是今天在使用LocalHistory的时候出了一个问题 就是在P
  • 一键自动状态机复用

    一键自动状态机复用 代码块 using System Collections Generic using System IO using UnityEditor using UnityEditor Animations using Unit
  • quartz报错Couldn’t obtain triggers for job:connection closed

    运行环境 springboot2 1 1 quarz2 3 0 jdk8 war包运行在tomcat9 11 00 57 624 http nio 8082 exec 2 ERROR c k f w e GlobalExceptionHan
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • Hexo搭建教程

    小白搭建教程 逢山开路 遇水架桥 亲测有效 在搭建过程中遇到问题也可以看看我这篇博客 或许有相似的问题 我这里遇到并解决的问题是 npm命令报错 没有权限 hexo g命令报错 duplicated mapping key hexo d命令
  • PC软件崩溃定位方式-windbg

    本篇适用于WINDOWS的C C 编译的程序分析 不适用于C java程序分析 windbg是微软的工具 可以去微软官方搜索下载 该工具可以调试exe 也可以导出收集dmp文件 用于后续分析 当前方式主要应用于启动的瞬间崩溃 分析步骤 启动
  • Python实现字符串分隔(华为机试)

    目录 题目描述 题目分析 测试用例 代码 传送门 题目描述 连续输入两组字符串 请按长度为8拆分每个字符串后输出新的字符数组 长度不是8整数倍的字符数组请在后面补0 输入 输出示例 输入 abc 123456789 输出 abc00000
  • 点击按钮时触发防抖

    当在React中点击按钮时触发防抖 并传递一个ID作为参数 你可以使用useRef和useCallback钩子来实现 import React useState useRef useCallback from react const But
  • 802.11 帧格式及类型

    1 帧格式 下面是802 11帧的组成结构 帧总寻此结构 从上面的结构可以知道 前俩个字节为 帧控制字段 控制字段的前2bit节为 协议类型 目前此值为 0 1 控制帧 用于竞争期间的握手通信和正向确认 结束非竞争期等 2 管理帧 主要用于
  • Altium designer10---PCB添加Logo

    安全之安全 security 博客目录导读 目录 1 生成bmp后缀的图片 画图打开 调整大小 生成bmp 2 生成PCB Logo PCB Logo Creator 图标生成器 Load加载 Convert转换 3 复制到所制作板子的PC
  • python基础八:函数

    1 函数简介 1 1语法 语法 def 函数名 形参1 形参2 形参3 代码块 函数名 调用函数 1 2介绍 函数是个对象 function 函数用来保存一些可执行的代码 在你需要的时候可以对这些语句进行多次调用 函数中保存的代码不会立即执