热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python3--函数(函数,全局变量和局部变量,递归函数)

1.1函数1.1.1什么是函数函数就是程序实现模块化的基本单元,一般实现某一功能的集合。函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能,

1.1函数

1.1.1什么是函数

函数就是程序实现模块化的基本单元,一般实现某一功能的集合。
函数名:就相当于是程序代码集合的名称
参数:就是函数运算时需要参与运算的值被称作为参数
函数体:程序的某个功能,进行一系列的逻辑运算
return 返回值:函数的返回值能表示函数的运行结果或运行状态。

1.1.2函数的作用

  1.  函数是组织好的,可重复使用的,用来实现单一,或者相关功能的代码。
  2.  函数能够提高应用的模块性,和代码的重复利用率

我们已近知道python提供了许多内置函数,比如print(),我们自已创建的函数称为内置函数

1.1.3定义函数的语法

def 函数名(参数):
函数体
return 返回值内容

 1.1.4函数定义规则

  1. 函数代码以def关键词开头,后接定义函数的名称和圆括号,冒号():
  2. 函数内容以冒号":"开始,并且缩进
  3. 函数内容的第一行内容可选择性使用文档字符串---用来定义该函数的说明
  4. 函数的返回值: return  [返回值内容]  用于结束函数,返回一个值,表示程序执行的结果。
  5. 函数不带return 默认返回None   返回值可以是任何类型的数据(数字,字符串,函数,列表,元祖,字典等),也可以是一个表达式
  6. 函数参数:任何传入参数和自变量必须放在圆括号中间,圆括号之间用于定义参数。

1.1.5函数调用

定义函数语法

def printinfo():
print("hello world")
return

调用函数

printinfo()
#函数执行结果
hello world

查看函数返回值

print(printinfo())
#结果
hello world
None
#默认函数值返回类容

其他返回值示例

def printinfo():
print("hello world")
return [111+222]
print(printinfo())

#结果
hello world
[
333] #返回值内容

 

1.1.5函数参数

注:形参和实参(定义函数时,圆括号(参数)中的所有参数都是形式参数也称为形参,调用函数中,圆括号(参数)中的参数称为实际参数,也叫实参)

1)必须参数::

2)关键字参数:

3)默认参数:

4)可变参数(*args,**kwargs):

 1.必须参数:

从字面理解:必须要传入参数

传入的参数:与定义的形参顺序一一对应

def stuinfo(name,age):
print(name,age)
return

#在不传入参数
stuinfo() #调用函数

#函数执行结果
TypeError: stuinfo() missing 2 required positional arguments: 'name' and 'age'
#报错,提示类型错误,该函数,缺少两个位置参数
不传入参数
def stuinfo(name,age):
print(name,age)
return
stuinfo(
"zhangsan",18)
#函数执行结果
zhangsan 18
传入参数

 2.关键字参数

def stuinfo(name,age,hobby):
print(name,age,hobby)
return

#参数位置匹配,关键字参数,与形参的位置顺序无关,
stuinfo(age=19,name="lisi",hobby="run")
#name= age= hobby=就是关键字参数

#函数执行结果
lisi 19 run
关键字参数

3.默认参数

默认参数必须指向不变的对象

当函数有多个参数,把变化大的参数反正前面,变化小的参数放在后面。变化小的参数就作为默认参数。

默认参数好处:降低调用函数的难度

#默认参数,可以直接使用用,也可以修改默认参数值
def grade(name,age,city="BeiJing"): #city="BeiJing" 就是默认参数
print(name,age,city)
# grade("yangjian",age=18)
grade("lala",age=18,city="shanghai")

#grade函数执行结果
lala 18 shanghai
默认参数

4.可变参数

*args  **args

用途:在定义函数需要,每个定义函数功能的都可以继续优化,所以我们需要用动态参数

如果把参数写死了,后期继续修改完善的功能的,修改该函数功能则会相当麻烦

*args  结果类型是元祖,传递值是任意类型

def test(*args):
print(args)
test(
123456,[12,45,88],{"name":"qw","age":15}) #可以传递任意参数的类型
#
函数执行结果
(123456, [12, 45, 88], {'name': 'qw', 'age': 15})

**kwargs结果类型是字典,传递值是以key=value方式传入

def test1(**kwargs):
print(kwargs)
test1(name
="xiha",age="12")

#执行结果
{'age': '12', 'name': 'xiha'}

 

函数* 和 ** 解包

#*
def test(*args):
print(args)
test(
*[1,2,3,4,5,6,7,8,9]) #*参数解包,把【元素】 循环出来,添加到元祖中
#
结果
(1, 2, 3, 4, 5, 6, 7, 8, 9)
*
def test1(**kwargs):
print(kwargs)
test1(
**{"hobby":456,"number":789}) #**参数解包,把key:value 循环出来,添加到字典中
#
结果
{'number': 789, 'hobby': 456}
**

 

函数参数组合

def f2(a, b, c=0,*args,**kwargs):
print('a =', a, 'b =', b, 'c =', c, args,kwargs)
f2(
12,b=12,c=89,aa="as",bb="xxx")
#结果
a = 12 b = 12 c = 89 () {'bb': 'xxx', 'aa': 'as'}

函数参数总结:

1.形参的位置顺序,必须与实参的顺序一一对应,缺一不行,多一不行

2.关键字参数,无须一一对应,缺一不行,多一不行

3.位置参数必须在关键字参数左边

4.默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误

1.2全局变量和局部变量

在子程序中定义的变量称为局部变量,只在子程序内部生效,

在程序一开始定义的变量称为全局变量

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用,在其他地方全局变量起作用

name = "xixi"   #全局变量
def change_name():
name
= "haha" #局部变量只在函数局部作用域内生效
print("我的名字",name)
return
change_name()
print(name)

def me():
global name #声明name是全局变量 global
name = "yj" #修改name全局变量的值
print(name)
return
me()

如果全局变量是可变的数据类型,函数可以对全局变量内部直接进行修改

eng = ["merry","jack","petter"]
def chang():
eng.append(
"mali")
print(eng)
return
chang()

总结:

一般写程序变量的命名规则

###全局变量变量名大写

###局部变量变量名小写

  1. 函数优先读取局部变量,能读全局变量,无法对全局变量重新赋值操作,#全局变量是不可变的类型
  2. 全局变量是可变类型,函数可以对全局变量进行操作
  3. 函数中有global关键字,变量本质就是全局变量,可读取全局变量,也可操作全局变量

1.3函数之间嵌套

 

name = "YangJIan"  #最外层

def change_name(): #第二层
name = "YangJIan2"

def change_name2(): #第三层
name = "YangJIan3"
print("第3层打印", name)

change_name2()
# 调用内层函数
print("第2层打印", name)
change_name()
#先执行局部函数的打印,
print("最外层打印", name)

# 第3层打印 YangJIan3
#
第2层打印 YangJIan2
#
最外层打印 YangJIan

注:多层函数嵌套,子级函数,只在子级函数内部生效。父级函数能调用子级函数的功能

1.4递归函数

1.在函数内部,可以调用其他函数,如果一个函数在内部调用自身本身,这个函数就是递归函数。

2.在使用递归策越是,必须有一个明确的敌对结束条件,称为递归出口

函数调用的时候,每次调用时要做地址保存,参数传递等。

 

如果函数包含了对其自身函数的调用,该函数就是递归。如下

def foo(n):
#实现阶乘
if n == 1:
return n # 当满种条件n==1才执行return 操作
res = n*foo(n-1) #调用自已本身的函数的结果(再判断条件是否满足条件)给res ,
return res
print(foo(5))
#120

 递归算法所所体现的重复一般有的要求:

1.每次调用在上次规模上都有有所减小:

2.每次递归调用都是有明确条件的。

3.相领两次的重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出(返回值结果))就作为后一次的输入;

4.在问题的规模得到满足条件时,而不再进行递归调用。

 


推荐阅读
  • python教程分享python人物视频背景替换实现虚拟空间穿梭
    引言近期网上这位卖蜂蜜的小伙鬼畜挺火的,大家质疑背景造假,这里我就带着大家实现“背景造假”(ps:原视频小伙是在真实场景拍摄的)准备工作在实现该功能之前,我 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
  • 浅谈Python3中打开文件的方式(With open)
    浅谈Python3中打开文件的方式(With open)-目录0.背景知识1.常规方式:读取文件-----open()2.推荐方式:读取文件-----WithOpen1).读取方式 ... [详细]
  • Python Flask学习之安装SQL,python3,Pycharm(网上下载安装即可)
    1,下载时更改pypi源。可以额外安装虚拟化环境:pipinstall-ihttp:pypi.douban.comsimple--trusted-hos ... [详细]
  • 环境准备—之—linux下安装python3和pip3
    转自上海悠悠https:www.cnblogs.comyoyoketangp10195102.html前言centos7自带有python,但是却是python2版本的 ... [详细]
  • 正常情况下,我们完成一件事情的过程中,可能会存在多种条件限制如:用户去ATM机取钱->输入取款密码->输入正确,取钱成功|输入错误,退卡。这样的情况下,需要根据不同的条件,执行不同的逻 ... [详细]
  • 一、简介在面向对象的程序设计中类和对象是其重要角色,我们知道对象是由类实例化而来,那么类又是怎么生成的呢?答案是通过元类。本篇文章将介绍元类相关知识,并剖析元类生成类的过程,以及元 ... [详细]
author-avatar
981378224_014f95
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有