Python函数进阶

函数
定义:函数是将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需要调用其函数名即可
特性:减少重复代码;使程序变的可拓展;使程序变得易维护

函数参数
形式参数:只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元;形参只在函数内部有效。函数调用结束返回主调用函数后不能在使用该变量

实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,应预先赋值,输入等方法使参数获得确定值。

关键参数:指定了参数名的参数就叫关键参数(关键参数必须放在位置参数之后)

非固定关键字参数
def stu_register(name,age,*args): #*args会把多传入的的参数变成一个元组形式,如果*args没有传值,会返回一个空元组
print(name,age,args)
stu_rigister("xfxing",22)

def stu_register(name,age,*args,*kwargs):#*kwargs会把多传入的的参数变成一个字典(dict)形式,如果*kwargs没有传值,会返回一个空字典
print(name,age,args)
stu_rigister("xfxing",22)

函数返回值
函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句把结果返回
注意:函数在执行过程中只要遇到return语句,就会停止执行并返回结果
如果未在函数中指定return,这个函数返回值为None

局部变量 不用传值到函数里,也可以在函数里调用外面的变量
1.在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量
2.全局变量作用域是整个程序,局部变量作用域是定义该变量的函数
3.当全局变量与局部变量同名是,在定义局部变量的函数内,局部变量起作用,在其他地方全局变量起作用

在函数内修改全局变量,可先声明要修改的全局变量 然后再去修改它(应从实际开发角度去考虑)
name="alex"
def change_name():
global name
name="xfxing"
print(name,id(name))

change_name()
print(name,id(name))

在函数里修改列表数据
names=[‘Alex‘,‘Rain‘,‘Girl‘]
def change_name():
del names[2]
names[1]="黑姑娘"
print(names)

change_names()
print(names)

重新赋值不可以,修改列表里的值可以,整体的内存地址不能改,里面的某个元素可以修改

作用域(scope)
通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

在Python中函数就是一个作用域(JavaScript类似),局部变量放置在其作用域中
代码定义完成后,作用域已经生成,作用域链向上查找

作用域的查找顺序:LEGB(locals->enclosing function->globals->__builtins__)
locals是函数内的名字空间,包括局部变量和形参
enclosing外部嵌套的名字空间
globals全局变量,函数定义所在模块的名字空间
builtins内置模块的名字空间

嵌套函数(在函数中嵌套函数)
不能直接调用内层嵌套的函数

1.函数内部可以再次定义函数
2.执行需要被调用

匿名函数
就是不需要显示的指定函数名
func=lambda x,y:x*y if x<y else x/y #申明一个匿名函数
print(func(8,16))

f=lambda x:x**x

高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数称之为高阶函数

只需满足以下任意一个条件,即是高阶函数
1.接受一个或多个函数作为输入
2.return返回另外一个函数

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

递归特性:
1.必须要有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出)

原文地址:https://www.cnblogs.com/xfxing/p/9098164.html

时间: 2024-10-13 16:22:56

Python函数进阶的相关文章

Python 全栈开发:python函数进阶

python函数进阶 函数嵌套 函数对象 命名空间与作用域 闭包函数 装饰器 一.函数嵌套 函数的嵌套定义 def func1(): print('from func1') def func2(): #func2=内存地址 print('from func2') print(func2) func1() 函数的嵌套调用 # 比较两个数的大小 def max2(x,y): if x > y: return x else: return y # 比较三个数的大小 def max3(x,y,z): r

第六篇:Python函数进阶篇

在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点:  一.Python的迭代器和生成器 二.Python的内置函数 三.Python的open函数之文件处理 四.Python的递归函数 五.Python的高阶函数 六.Python的装饰器 一.Python的迭代器和生成器: 本篇我们介绍可迭代对象和迭代器对象--包括两者的定义及区别.为什么要有迭代器对象,其的用法是怎么样的

python 函数进阶class Student(object): @property def score(self): return self._score @score.setter def score(self, value): if not isinstance(value, int): raise V

1.类和实例 #类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的方法,但各自的数据可能不同. #__init__ 方法 ,其第一个参数永远是self,print_score也是方法. name score 属性 class Student(object): def __init__(self, name, score):        self.name = name        self.score = score def p

Python - 函数进阶之装饰器

本章内容 高阶函数 装饰器 前言 接着上一篇函数进行整理.. 一.高阶函数 高阶函数就是将一个函数以参数的形式传入另一个函数 1 def main_func(func): 2 # 定义一个主函数,并设置一个参数func 3 4 return func 5 # 返回func的值,因为我需要传入一个函数,即返回func的返回值 6 7 def func(): 8 # 定义一个函数作为参数传入主函数 9 10 return "Lyon" 11 # 返回 "Lyon" 给f

13 Python 函数进阶

代码在运行伊始,创建的存储"变量名与值的关系"的空间叫做全局命名空间,在函数的运行中开辟的临时的空间叫做局部命名空间 命名空间和作用域 命名空间的本质:存放名字与值的绑定关系 1 >>> import this 2 The Zen of Python, by Tim Peters 3 4 Beautiful is better than ugly. 5 Explicit is better than implicit. 6 Simple is better than

Python 函数进阶

一.函数即变量 def say(name): print(name)ybq = say #可以被赋值给其他变量ybq('Amily') #调用函数 函数名:say 函数体:第1-2行 返回值:return 后的值 函数的内存地址:当函数体被读进内存后的保存位置,它由标识符即函数名say引用,                                                   也就是说say指向的是函数体在内存内的保存位置. 函数名加括号:  例如say(),函数的调用方法,只有见

Python函数进阶:闭包、装饰器、生成器、协程

返回目录 本篇索引 (1)闭包 (2)装饰器 (3)生成器 (4)协程 (1)闭包 闭包(closure)是很多现代编程语言都有的特点,像C++.Java.JavaScript等都实现或部分实现了闭包功能,很多高级应用都会依靠闭包实现. 一般专业文献上对闭包的定义都比较拗口,比如:“将组成函数的语句和这些语句的执行环境打包在一起时,得到的对象称为闭包.” 其实,简单来说,你可以将闭包看成是一个轻载的类,这个类只有一个函数方法,并且只有为数不多的几个成员变量. 闭包的优点是:实现起来比类稍微轻巧一

2.3.10 Python 函数进阶

名称空间 又名 name space. 说明:若变量 x=1, 1存放于内存中,那名字x存放在哪里? 名称空间正是存放名字x与1绑定关系的地方 名称空间共三种: locals: 是函数内的名称空间,包括局部变量和形参 globals: 全局变量,函数定义所在的模块的名字空间 builtins: 内置模块的名字空间 不同变量的作用域不同,就是由于这个变量所在的命名空间决定的 作用域的范围 全局范围:全局存活,全局有效 局部范围:临时存活,局部有效 查看作用域的方法 globals(),locals

python函数基础学习

函数的定义与调用: def 函数名(参数1,参数2): '''函数注释''' print('函数体') return 返回值 定  义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def 是固定且不可变的 函数名:函数名是包含字母.数字.下划线的任意组合,(不能以数字开头) 函数调用: 返回值 = 函数名 (参数1,参数2) 函数返回值: 1- return的作用:结束一个函数的执行 2- 首先返回值可以是任何的数据类型 3- 函数可以有返回值:如有返回值,必须要用变量接受才有效果