Python基础 - 7.函数

7、Python 函数:从基础到应用 本文详细介绍了 Python 函数的基本概念、定义与调用方法,并通过示例展示了如何使用函数设计模块化程序。内容涵盖函数命名规范、参数传递、返回值、递归函数、匿名函数以及函数在实际项目中的应用。通过学习本文,读者可以掌握函数的核心知识,并能够灵活运用在实际编程中。 阅读详情

函数概述

在python中,使用def关键字声明一个函数。Def行的最后必须加冒号。函数的实现需要缩进。格式:

def  函数名(形参):
    函数的实现

然后,通过如下方法调用函数

函数名(实参)

比如:无参数的函数

# 声明一个无参数的函数
defsayHello():
print('helloworld')

# 调用无参数的函数
sayHello()

PS. 函数的类型是function

print(type(sayHello)) # <class 'function'>

有参数的函数

# 声明一个带一个参数的函数
defprintValue(value):
print('参数为', value)

# 调用带一个参数的函数
printValue(9527)
# 声明一个带两个参数的函数
defprintSum(a, b):
print('和为', (a + b))

# 调用带两个参数的函数
printSum(3,8)

函数的参数可以指定默认值。如果调用函数的时候,没有传递该参数,则使用默认值

# 指定默认值的函数
defprintSum1(a = 3, b = 5):
print('和为', (a + b))

printSum1(2,8) # 10 给a和b都传递参数
printSum1(2) # 7 只给a传递参数2 b使用默认值5作为参数
printSum1() # 8 a和b都使用默认值作为参数
printSum1(b = 2) # 5 只给b传递参数2 a使用默认值3作为参数
print(a = 2, b = 7) # 在传递参数的时候指定参数名
print(b = 2, a = 7) # 在传递参数的时候指定参数名的时候 可以颠倒参数的顺序

函数可以通过return关键字返回值。如果不写return,就认为返回None

# 没有返回值的函数
defsum1(a, b):
    sum = a + b
# 没有返回值
# return None

result = sum1(3,8)
print(result) # None
print(type(result)) # <class 'NoneType'>


# 有一个返回值的函数
defsum2(a, b):
    sum = a + b
# 有一个返回值
return sum

result = sum2(3,8)
print(result) # 11

# python特有
# 有两个返回值的函数
# 实际上返回的是一个元组
defsum3(a, b):
    sum1 = a + b
    sum2 = a * b
return sum1, sum2

result1, result2 = sum3(3, 8)
print(result1, result2) # 11 12
result = sum3(3, 8)
print(result) # (11, 24)
print(type(result)) # <class 'tuple'>

思考:

defaddOne(a):
    a = a + 1

value1 = 5
addOne(value1)
print(value1) # 5

输出结果是5而不是6,为什么?

可变参数*args和**kwargs

其中args是元组;kwargs是字典

思考:写一个函数sum()要求:

sum(1,2)=3

sum(1,2,3)=6

sum(1,2,3,4)=10

………………

sum(1,2,3,4,……,100)=5050

def sum(*args):
    # args是可变参数 类型为元组
    #print(args)
    result = 0
    for i in args:
        result += i
    
    return result
    
    
print(sum(1) == 1) # True
print(sum(1,2) == 3) # True
print(sum(1,2,3) == 6) # True
print(sum(1,2,3,4) == 10) # True
print(sum(1,2,3,4,5) == 15) # True

参考下面的例子

def fun(value1, value2, value3 = 0, *args, **kwargs):
    print('value1 = ', value1, 'value2 = ', value2, 'value3 = ', value3, 'args = ', args, 'kwargs = ', kwargs)

fun(1,2)  # value1 =  1 value2 =  2 value3 =  0 args =  () kwargs =  {}
fun(1,2,3) # value1 =  1 value2 =  2 value3 =  3 args =  () kwargs =  {}
fun(1,2,3,4) # value1 =  1 value2 =  2 value3 =  3 args =  (4,) kwargs =  {}
fun(value1=4,value2=5,value3=6) # value1 =  4 value2 =  5 value3 =  6 args =  () kwargs =  {}
fun(value1=4,value2=5,value3=6,value4=7) # value1 =  4 value2 =  5 value3 =  6 args =  () kwargs =  {'value4': 7}
fun(1,2,'hello','world') # value1 =  1 value2 =  2 value3 =  hello args =  ('world',) kwargs =  {}
fun(1,2,3,'hello','world') # value1 =  1 value2 =  2 value3 =  3 args =  ('hello', 'world') kwargs =  {}
fun(1,2,3,'zhangsan',23,178.3) # value1 =  1 value2 =  2 value3 =  3 args =  ('zhangsan', 23, 178.3) kwargs =  {}
fun(1,2,3,name='zhangsan',age=23,height=178.3) # value1 =  1 value2 =  2 value3 =  3 args =  () kwargs =  {'name': 'zhangsan', 'age': 23, 'height': 178.3}

global和nonlocal

思考如下问题:

a = 10
def fun():
    value = a + 1
    print('a = %d, value = %d' % (a, value))

fun() # a = 10, value = 11

此时是正常输出的
但如果改成

a = 10
deffun():
a = a + 1
    value = a + 1
print('a = %d, value = %d' % (a, value))

fun()

程序就会报错,原因是:

  • 左边的a是fun函数栈上的变量

  • 右边的a根据就近原则 如果函数栈上有变量则先访问函数栈上的

  • 此时会报referenced before assignment的错误(先访问再赋值)

  • 修改方法:在a=a+1前,强制声明a变量是全局变量

a = 10
def fun():
    global a # 强制声明a为全局变量
    a = a + 1
    value = a + 1
    print('a = %d, value = %d' % (a, value))

fun()

如果一个变量是非全局的,非局部的。通常是指在嵌套作用域的外层,此时需要使用nonlocal来声明。

def outer():
    num = 10 # 这个变量在外部函数的里面 在内部函数的外面
    def inner():
        nonlocal num
        num = num + 1
    
    inner()
    print(num)

递归

递归就是函数调用自己本身。特别容易出现死循环,而且会出现内存崩溃。

递归一般需要做两件事:

  • 1 找出口

  • 2 找进入下一层的方式

比如:通过递归函数求阶乘

  • 5! = 1*2*3*4*5

  • fac(n)=n*fac(n-1)

# 递归函数求阶乘
def fac(n):
    # 1 找出口
    if n == 1 or n == 0:
        return 1
        
    # 2 找进入下一层的方式
    return n * fac(n-1)

print(fac(3))
print(fac(10))

匿名函数:lambda表达式

Lambda指的是λ

慎用

如果一个函数代码量较少(一行起,两行止),可以考虑使用lambda表达式。

# 普通函数
# 普通函数
def add(x,y):
    return x + y
    
result = add(3,5)
print(result)
# 匿名函数
add = lambda x,y: x + y
result = add(4,7)
print(result)

Lambda表达式也可以设置默认值。

# 给参数设置默认值
add = lambda x = 2,y = 5: x + y
print(add(4,7)) # 11
print(add(4)) # 9
print(add()) # 7
print(add(y = 9)) # 11

练习

猜数。自己先想一个1~100之间的数,写一个程序去猜这个数。

电脑输出:请先想好一个1\~100之间的数,按回车继续

(假设用户想的是78)

电脑猜50,用户反馈:小了

电脑猜75,用户反馈:小了

电脑猜87,用户反馈:大了

 ……………………

电脑猜78,用户反馈,中了

程序结束

本章项目源码

URL:https://gitee.com/yuanbaonet/master_python/tree/baoai_python_v7/

对应版本:baoai_python_v7

对应文件:sample/python/p7.py

一文搞懂什么是OTA(空中升级) OTA(Over-The-Air,空中升级)是一种通过无线通信技术实现远程更新设备固件或软件的方法。这项技术广泛应用于现代物联网(IoT)设备、智能手机、汽车、嵌入式系统等领域,提供了一种无需物理连接的便捷更新方式。OTA更新的核心在于使设备能够自动、可靠、安全地从远程服务器获取和应用更新,改善设备性能、添加新功能或修复安全漏洞。 阅读详情

相关推荐

【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio)

本文介绍 Windows 环境下无需安装 Visual Studio,搭建 Qt6 与 MSVC2022 开发环境的方法,以节省磁盘空间。核心步骤包括:用中科大镜像提速 Qt6 在线安装,需勾选 Qt Creator 17.0.1、MSVC 2022 x64 等组件;配置环境变量,添加 mingw_64、msvc2022_64 及 Qt Creator 的二进制目录;安装 MSVC 2022 编译器与 Windows 10 SDK 并记录版本;配置 Qt Creator 构建套件,可选设置 vcvarsal

油炸自行车的博客 2923

day07 (02)输出和输入

输出1. 普通的输出生活中的“输出”软件中的“输出”python中变量的输出 # 打印提示 print('hello world') print('萨瓦迪卡---泰语,你好的意思') 2. 格式化输出&lt;1&gt;格式化操作的目的比如有以下代码: pirnt(...

abc____123的博客 383

FANUC机器人KAREL编程实战:手把手教你用SOCKET指令连接外部设备(附完整.KL文件)

本文详细解析了FANUC机器人KAREL编程中SOCKET指令的应用,从开发环境配置到工业级通讯全流程,涵盖网络参数设置、模块化代码设计、错误处理及现场调试技巧。通过实战案例,帮助开发者掌握与外部设备稳定连接的关键技术,提升工业自动化系统的通讯可靠性。

weixin_30907935的博客 226

python基础——条件判断

如有兴趣了解更多请关注我的个人博客。

xiaohei07的博客 1669

自旋玻璃(spin glass)、自旋冰(spin ice)和量子自旋液体(quantum spin liquid)(之二)

具有相同电荷的电子相互排斥。结果,为了在极其拥挤的环境中相互超越,他们不得不改变自己的行为。剑桥大学和英国伯明翰大学于 2009 年 7 月发表的研究表明,电子可以通过量子隧穿从金属表面跳到相近位置的量子线上,这样做后,将分离成两个准粒子,命名为的自旋子和全子。Van den Brink、Khomskii 和 Sawatzky 在 1997-1998 年对轨道子进行了理论上的预测。在 2011 年 9 月发给出版商的论文中报告了它作为一个单独的准粒子的实验观察结果。

qq_32515081的博客 1万+

UniTouch:多模态触觉对齐技术如何重塑零样本跨模态应用

UniTouch模型通过创新的多模态触觉对齐技术,成功将触觉数据映射到通用的视觉-语言嵌入空间,解决了触觉模态的“孤岛困境”。该技术利用对比学习和传感器特定标记,实现了高质量的零样本学习能力,使模型无需额外训练即可完成触觉分类、描述等任务,并能驱动跨模态生成,为机器人、VR和智能制造等领域提供了强大的触觉理解新范式。

weixin_29044713的博客 409

python学习笔记(四)字符串与常用数据结构

字符串的使用 字符串是用来记录文本信息的,它是由是由零个或多个字符组成的有限序列序列中的元素包含了一个从左到右的顺序——序列中的元素根据它们的相对位置进行存储和读取。从严格意义上来说,字符串是单个字符的字符串序列,其他类型的序列还包括列表和元组。在Python程序中,如果我们把单个或多个字符用单引号或者双引号包围起来,就可以表示一个字符串。 ...

LeavingBook的博客 569

告别环境依赖!用PyInstaller把PaddleOCR项目打包成独立EXE(附完整spec文件配置)

本文详细介绍了如何使用PyInstaller将PaddleOCR项目打包成独立EXE文件,彻底解决Python环境依赖问题。通过完整的spec文件配置和实战技巧,开发者可以轻松创建开箱即用的OCR工具,特别适合需要交付给非技术用户的场景。文章涵盖环境配置、模型打包、性能优化等关键环节,并提供了解决常见问题的方案。

weixin_33712987的博客 573

Python字符串中增加变量--%方式(格式化输出)

Python字符串中增加变量–%方式(格式化输出) value = 10 string = 'test' # 格式化输出int和str int_value = 'lewis is %d' % value str_value = 'lewis is %s' % string # 匹配多种变量 int_str_value = 'lewis is %d %s' % (value, string) ...

刘贝斯老师的博客 5173

有限元分析必看:如何用ANSYS检查关键区域的网格质量(附操作截图)

本文聚焦有限元分析中决定仿真精度的关键环节,详细讲解了如何利用ANSYS Workbench对关键区域进行网格质量检查与优化。文章提供了从思维转变、实战操作到指标解读的完整流程,强调通过命名选择、Worksheet过滤器等工具实现定向检查,并给出了针对结构分析的关键区域网格质量阈值建议,帮助工程师提升仿真结果的可靠性与效率。

weixin_29200741的博客 466

Python 爬虫实战:美团大众点评餐厅数据爬取与分析

本文摘要:美团/大众点评餐厅数据爬虫实战指南 本文详细介绍了如何开发一个完整的餐厅数据爬虫系统,涵盖从环境配置到数据可视化的全流程。主要内容包括: 项目目标:爬取餐厅基本信息(名称、评分、价格等)及详情数据,支持市场分析和商业决策 技术方案:使用Python生态工具(Requests、Playwright、Pandas等)构建爬虫系统 核心挑战:破解大众点评的字体反爬机制和美团的API签名验证 实现细节:提供完整的代码示例,包括字体解析、签名生成、请求重试等关键功能 数据应用:支持将结果导出为CSV/Exc

u014481728的博客 317

linux下的线程及同步机制(1)

大部分内容摘抄自《Linux一站式学习》,只是一个笔记,具体内容,推荐看原书 ================================================================================================================================== 由于同一进程的多个线程共享同一地址空间,因此Text

simeone18的专栏 866

Vue2 - 最新详细实现接入天地图详细配置流程及示例代码教程,提供获取用户当前定位的城市名称及省市区数据、精准经纬度信息、IP属地定位、地图搜索标点等示例,解决天地图跨域报错/页面白屏/定位不准问题

vue2,nuxt2,天地图,使用教程,vue接入国家天地图,定位api,ip属地定位,获取用户当前位置数据,省市区,地图不显示,白屏,报错,vue2如何使用天地图,地图选点,cors跨域,白名单设置了还是不行,vue项目调用天地图api实现定位,Vue2中使用天地图,详细教程,天地图申请密钥key教程,经纬度,经纬度不准确,一直定位北京,定位在北京不准怎么办,nuxt项目天地图,网站,网页,h5页面,地图显示不全,获取当前定位,如何使用天地图,拿到客户ip地址定位城市名称,距离计算,实时搜索地址逆解析,天

🏆 前端领域优质创作者 5326

python3基础之(十)def函数_零基础入门python3.7 ——基础知识总结(十) 函数基础

def sun(mag):a = 0for i in list(range(mag)):a += ireturn ab = sun(1002)print(b)c = b - 10000print(c)501501------------------491501我们在示例2 的基础上又添加了return a 这句话的意思是把计算结果返回到函数调用的地方。这样我们就可以用个计算结果去做别的事了。小...

weixin_40003512的博客 233

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python基础7-函数

文章目录一、函数1.函数的定义和调用1)定义-基本概念2)函数的分类3)函数的调用4)形参和实参5)文档字符串-函数注释6)返回值7)函数也是对象、2.变量的作用域1)栈帧内存分析2)global关键字3)局部变量和全局变量的效率测试3.参数的传递1)传递可变对象的引用2)传递不可变对象的引用3)不可变对象中含可变对象4)浅拷贝和深拷贝及内存分析4.参数的类型1)位置参数2)默认值参数3)命名参数-关键字参数4)可变参数-收集参数5)强制命名参数5.匿名函数-lambda表达式6.eval()函数7.递归函

柳杰的博客 297

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

python基础7 - 函数

1. 函数的快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用 函数的使用包含两个步骤: 定义函数 —— 封装 独立的功能 调用函数 —— 享受 封装 的成果 函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的 重用 2. 函数基本使用 2.1 函数的定义 格式如下: def 函数名(): ...

798

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Python基础——7.函数

Python基础——7.函数

qq_53381910的博客 343

Python基础-7函数Ⅰ

一、函数的作用 函数就是将一段具有独立功能的代码块整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的需求。 函数在开发过程中,可以更高效的实现代码重用。 二、函数的使用步骤 1.定义函数 def 函数名(参数): 代码1 代码2 ...... 2.调用函数 # 函数名(参数) 注意: 不同的需求,参数可有可无。 在Python中,函数必须先定义后使用。 三、函数的参数作用 ...

迷路的小绅士之家 254

Python基础7——函数基础

7.1函数的定义 函数就是对代码进行封装。把实现某一功能的相同代码,进行封装到一起。下次需要使用时,直接调用即可,不需要再进行代码编写。 定义方法: def function_name(params): block return expression(表达式)/value def :表示定义一个函数 function_name :函数名,和变量名的命名要求相同,以字母或者...

子藤的博客 444

7.Python基础 函数

根据vamei前辈的博客学习的: http://www.cnblogs.com/vamei/archive/2012/06/01/2529500.html 函数的定义,形参的定义,函数的返回值 #!/usr/bin/env python ################ 返回一个值 ############################## def sum(a, b): #请注...

dietan8353的博客 250

python基础7 - 函数2

4. 使用元组让函数返回多个值 利用 元组 同时返回温度和湿度 def measure(): """返回当前的温度""" temp = 39 wetness = 10 return (temp, wetness) temp, wetness = measure() 提示:如果一个函数返回的是元组,括号可以省...

256

Python基础语法(7)——函数

函数是什么 Python中的函数与数学中的函数不同,它不再只是公式,而是实实在在有着自己特定功能的代码。其实在潜移默化中我们已经有所接触了。 比如print()函数,range()函数,type()函数等。 函数各式各样,或简单或复杂,但其本质却好是相通的:给函数一些数据,函数进行处理,输出你想要的东西。 函数名后面的括号里放参数,参数即要处理的数据。 函数的定义:函数是组织好的、可以重复使用的、用来实现单一功能的代码。 定义和调用函数 定义函数: 语法如下: def 函数名(参数1,参数

panlan7的博客 966

Python基础知识——7、函数

7、函数 函数定义方式 使用def关键字定义函数,在圆括号中写明形参,函数定义第一行之后的连续三个引号括出的是函数功能说明,依此可以生成有关程序中的文档,这不是必须的,但是是一个好习惯,能够让别人使用你的代码时,快速知道函数的功能。 在第一行之后利用缩进表明函数的范围。 定义: def function_name (args): """这是函数的文档定义,即功能说明""" do something (return something) #可选 调用: function_name

buzhidao2333shuosha的博客 305

day 7Python 函数基础应用

函数通过def# 基础函数定义与参数使用def num_add(a, b=9): # b设置默认值9"""计算两个数的和""""""向指定名称的人打招呼"""print(f"{name}, 你好!")# 不同的参数传递方式print("1. 位置参数调用:", num_add(20, 20)) # 40print("2. 关键字参数调用:", num_add(b=10, a=30)) # 40print("3. 使用默认参数:", num_add(a=9)) # 18 (9+9)

LZLQai的博客 313

python基础:7、函数

定义函数 #定义函数 def greet_user(): """显示简单的问候语""" print("Hello!") greet_user() #向函数传递信息 def greet_user(username): """显示简单的问候语""" print("Hello,"+username.title()+"!") greet_user("jesse") #实参和形参 #username是形参 jesse是实参 #414 def display_mess

weixin_54221839的博客 844
上一篇: Python基础 - 6.数据类型
下一篇: Python基础 - 8.面向对象编程
idsof
博客等级 码龄21年 9粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值