Python系列-函数(下)

这篇具有很好参考价值的文章主要介绍了Python系列-函数(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python系列-函数(下),Python,python,开发语言

 🌈个人主页: 会编程的果子君
💫个人格言:“成为自己未来的主人~”

 Python系列-函数(下),Python,python,开发语言

目录

变量作用域

函数执行过程

链式调用

嵌套调用

函数递归

参数默认值

关键字参数

小结


变量作用域

观察下面的代码

 

def getpoint():
    x=10
    y=20
    return x,y
x,y=getpoint()

在这个代码中,函数内部存在x,y,函数外部也有x,y

但是这两组x,y不是相同的变量,而只是恰好有一样的名字

变量只能在所在的函数内部生效

在函数getpoint()内部定义的x,y只是在函数内部生效,一旦出了函数的范围,这两个变量就不生效了。

def getpoint():
    x=10
    y=20
    return x,y
print(x,y)

Python系列-函数(下),Python,python,开发语言

在不同的作用域中,允许存在同名的变量

 

x=10

def test():
    x=10
    print(f'函数内部={x}')

test()
print(f'函数外部={x}')

 Python系列-函数(下),Python,python,开发语言

主意:

  • 在函数内部的变量,也称为“局部变量”
  • 不在任何函数内部的变量,也称为“全局变量” 

如果函数内部尝试访问的变量在局部不存在,就会尝试去全局作用域中查找

x=10

def test():
    print(f'x={x}')

test()

 Python系列-函数(下),Python,python,开发语言

如果想在函数内部,修改全局变量的值,需要使用global关键字声明

 

def test():
    global x
    x=10
    print(f'函数内部 x = {x}')

test()
print(f'函数外部 x = {x}')

 Python系列-函数(下),Python,python,开发语言

如果此处没有global。则函数内部的x=10,就会被视为是创建一个局部变量x ,这样就和全局变量x不相关了。

if/while/for等语句块不会影响到变量作用域

换而言之,在if/while/for中定义的变量,在语句外面也可以正常使用

for i in range(1,11):
    print(f'函数内部 i ={i}')

print(f'函数外部 i ={i}')

函数执行过程

  • 调用函数才会执行函数体代码,不调用就不会执行
  • 函数体执行结束(或者遇到return 语句),则回到函数调用位置,继续往下执行 
def test():
    print('执行函数内部代码')
    print('执行函数内部代码')
    print('执行函数内部代码')
print("1111")
test()
print("2222")
test()

Python系列-函数(下),Python,python,开发语言 

链式调用

 

def isodd(num):
    if num % 2 ==0:
        return False
    else:
        return True

result = isodd(10)
print(result)

实际上也可以简化写作

 

print(isodd(10))

把一个函数的返回值,作为另一个函数的参数,这种操作成为链式调用

这是一种比较常见的写法

嵌套调用

函数内部还可以调用其他的函数,这个动作称为“嵌套调用”

 

def test():
    print('执行函数内部代码')
    print('执行函数内部代码')
    print('执行函数内部代码')

test函数内部调用了print函数,这就属于嵌套调用

一个函数可以嵌套调用任意多个函数

函数嵌套的过程是非常灵活的

 


def a():
    print('a')

def b():
    print('b')
    a()

def c():
    print('c')
    b()

def d():
    print('d')
    c()

d()

 Python系列-函数(下),Python,python,开发语言

如果把代码稍微调整,打印结果则可能发生很大变化

 


def b():
    a()
    print('b')

def c():
    b()
    print('c')

def d():
    c()
    print('d')
d()

Python系列-函数(下),Python,python,开发语言

注意体会上述代码的执行顺序,可以通过画图的方式来理解

函数之间的调用关系,在Python中会使用一个特定的数据结构来表示,称为 “函数调用栈”,每次函数调用, 都会在调用栈里新增一个元素,称为 栈帧

可以通过PyCharm调试器看到函数调用栈和栈帧

在调试状态下,pycharm左下角一般就会显示出函数调用栈

函数递归

递归是嵌套调用中的一种特殊情况,即一个函数嵌套调用自己

代码示例:递归计算5!

def factor(n):
    if n ==1:
        return 1
    return n *factor(n-1)

result=factor(5)
print(result)

上述代码中,就属于典型的递归操作,在factor函数内部,又调用了factor自身

注意:递归代码务必要保证

存在递归结束条件,比如if n ==1 就是结束条件,当n为1的时候,递归就结束了

每次递归的时候,要保证函数的实参是逐渐逼近结束条件的

如果上述条件不能满足,就会出现无限递归,这是一种典型的代码错误

 


def factor(n):
    return n * factor(n-1)
result=factor(5)
print(result)

 Python系列-函数(下),Python,python,开发语言

如前面所描述,函数调用时会在函数调用栈中记录每一层函数调用的信息

但是函数调用栈的空间不是无限大的,如果调用层数太多,就会超出栈的最大范围,导致出现问题

递归的优点:

递归类似于“数学归纳法”,明确初始条件,和递推公式,就可以解决一系列问题

递归代码往往代码量非常少

递归的缺点:

递归代码往往难以理解,很容易超出掌控范围

递归代码容易出现栈溢出的情况

递归代码往往可以转换成等价的循环代码,并且通常来说循环版本的代码执行效率略高于递归代码

参数默认值

Python中的函数,可以给形参指定默认值

带有默认值的参数,可以在调用的时候不传参

代码示例:


def add(x,y,debug=False):
    if debug:
        print(f'调试信息: x={x},y={y}')
    return x+y
print(add(10,20))
print(add(10,20,True))

此处debug=False即为参数默认值,当我们不指定第三个参数的时候,默认debug的取值即为False

带有默认值的参数需要放到没有默认值的参数的后面

 

def add(x,debug=False,y):
    if debug:
        print(f'调试信息: x={x},y={y}')
    return x+y
print(add(10,20))
print(add(10,20,True))

 Python系列-函数(下),Python,python,开发语言

关键字参数

在调用函数的时候,需要给函数指定实参,一般默认情况下是按照形参的顺序,来依次传递实参的,但我们也可以通过关键字参数,来调整这里的传参顺序,显示指定当前实参给哪个形参。

 

def test(x,y):
    print(f'x={x}')
    print(f'y={y}')

test(x=10,y=20)
test(x=20,y=10)

 Python系列-函数(下),Python,python,开发语言

形如上述test(x=10,y=20)这样的操作,即为关键字参数

小结

函数是编程语言中的一个核心语法机制,Python中的函数和大部分编程语言的函数功能都是非常重要的

我们当下最重要的就是三个点:

函数的定义

函数的调用

函数的参数传递

Python系列-函数(下),Python,python,开发语言

 Python系列-函数(下),Python,python,开发语言文章来源地址https://www.toymoban.com/news/detail-821975.html

到了这里,关于Python系列-函数(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python入门系列】第十八篇:Python自然语言处理和文本挖掘

    Python自然语言处理(Natural Language Processing,简称NLP)和文本挖掘是一门涉及处理和分析人类语言的学科。它结合了计算机科学、人工智能和语言学的知识,旨在使计算机能够理解、解释和生成人类语言。 NLTK(Natural Language Toolkit):它是Python中最受欢迎的NLP库之一,提供了丰

    2024年02月15日
    浏览(63)
  • < Python全景系列-9 > Python 装饰器:优雅地增强你的函数和类

    欢迎来到我们的系列博客《Python全景系列》第九篇!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。 ** 装饰器在

    2024年02月07日
    浏览(45)
  • 猿创征文|【Python数据科学快速入门系列 | 05】常用科学计算函数

    这是机器未来的第44篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/126615267 本文以鸢尾花的数据预处理为例,描述了科学计算在机器学习使用的示例。 以鸢尾花数据集为例。 鸢尾花数据集有4个特征,1个标签,特征为sepal_length,sepal_width,petal_length,petal_width,分别

    2023年04月09日
    浏览(55)
  • 【Python入门系列】第十四篇:Python Web开发

    PythonWeb开发是使用Python语言进行Web应用程序开发的过程。Python是一种简洁、易读且功能强大的编程语言,因此在Web开发领域广受欢迎。 PythonWeb开发可以涵盖多个方面,包括服务器端开发、数据库管理、前端设计和API开发等。在服务器端开发中,常用的Python Web框架有Django、F

    2024年02月16日
    浏览(43)
  • python—matplotlib库系列学习(一):plot函数(包含title、xlabel、ylabel、legend函数)

    目录 引言 plot函数 (1)简单的举例说明 (2)参数说明          1. marker(标记样式字符串)          2. color(颜色)          3. linestyle 和 linewidth (3)一个简便的写法 (4)一个图上画多条线 (5)通用的图形的美化补充         1. 标题         2. x轴 -

    2024年02月07日
    浏览(56)
  • Selenium+Python系列 - 开发环境搭建

    我从未想过自己会写python系列的自动化文章,有些同学会问,那你现在为什么又开始写了? 不止一个人找过我,问我可以写一些 Python 自动化的文章吗,答案是肯定的。 那么,以后我将给大家带来接口和UI自动化两个方面的分享,还请大家持续关注我! 1、Python环境搭建 使用

    2024年01月16日
    浏览(45)
  • Python系列(1):简洁优雅,功能强大的编程语言

    在当今的编程世界中,Python已经成为了一种无处不在的语言。它不仅简单易学,而且功能强大,支持多种编程范式,包括面向对象编程、函数式编程和过程式编程。本篇文章将深入探讨Python的特性和应用领域。 简洁的语法 :Python的语法清晰、简洁,使得代码易于阅读和编写

    2024年01月21日
    浏览(56)
  • python通过ctypes传参numpy给c语言函数

    gcc -o demo.so -std=c++11 -shared -fPIC demo.c  python3 main.py 概述: 示例实现了numpy数组加上100并通过另外的数组的指针获取返回值。主要过程是 numpy数组转换成c_void_p类型,然后传参给c语言函数,c语言函数中指针强转到需要的数据类型,然后再处理。这样即可改变numpy数组中的数值实

    2024年02月12日
    浏览(41)
  • 【深度学习】 Python 和 NumPy 系列教程(三):Python容器:1、列表List详解(初始化、索引、切片、更新、删除、常用函数、拆包、遍历)

    目录 一、前言 二、实验环境 三、Python容器(Containers) 0、容器介绍 1、列表(List) 1. 初始化 a. 创建空列表 b. 使用现有元素初始化列表 c. 使用列表生成式 d. 复制列表 2. 索引和切片 a. 索引 b. 负数索引 c. 切片 3. 常用操作(更新、删除) a. 更新单个元素 b. 更新切片 c. 删除单

    2024年02月09日
    浏览(53)
  • Hlang--用Python写个编程语言-函数与基本数据结构实现

    okey,经过一段时间的努力,接下来要实现的是函数。当然还有对应的基本数据结构,那么之后的话,我们的工作就开始进一步转换了。 那么在这块我们要实现的有: 函数的定义 String类型的实现 列表类型的实现 实话实话,这个的实现是相当简陋的。不过作为一个小模型,应该

    2024年02月12日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包