具有名称的,是为了解决某一问题,功能代码的集合
目录
一.定义函数
二.函数的分类
三.局部变量和全局变量
1.局部变量(local variable)
2.全局变量(global variable)
四.函数调用的内存分析
五.函数的参数
1.默认值参数
2.可变参数(不定长参数)
3.关键字参数(命名参数)
六.匿名函数
七.python 3.8的新特性
八.递归(Recurresion)
一.定义函数
def function name([arges]):
#函数体
#[return 返回值]
调用函数
函数名称([实参列表])
def print_msg(name,age,adress):
'''
这是函数的注释
'''
print(f"我叫{name}")
print(f"今年{age}岁")
print(f"家住{adress}")
#调用函数
print_msg("长安",20,"西安")
print_msg("岁雾",21,"湖南")
#print(help(print_msg))
#__doc__魔法属性是调用注释
print(print_msg.__doc__)
二.函数的分类
1.根据函数是否存在返回值:有返回值的函数 return 无返回值的函数
2.根据函数是否存在参数:有参函数 无参函数
3.根据函数的定义者:系统函数 自定义函数 第三方函数
三.局部变量和全局变量
1.局部变量(local variable)
定义在函数内部的变量
2.全局变量(global variable)
定义在模块内,作用域是整体模块的变量
注意:1.python基于安全考虑,禁止在函数内修改全局变量。如果一定要修改,一定要声明
2.局部变量无法在外界访问
3.局部变量的作用域就在当前函数中
name = "长安"
age = 20
def show_info(a,b):
#修改全局变量,进行声明
global age
c = 10
print(c)
age += 18
print(age)
show_info(10,20)
print(name)
print(age)
四.函数调用的内存分析
值传递:在传递参数时,仅仅是将值拷贝一份,传递给函数的参数,变量的值不会因为函数内部的改动而发生变化
引用传递:在传递参数时,传递的是地址(指针),因此函数内的形参。获取的值也是同一块内存,因此整个值是同时被修改
五.函数的参数
1.默认值参数
通过定义函数时,将可能调用时不怎么变化的参数给定默认值,在调用时方便调用
注意:位置参数不能写在默认值参数后面
def get_circle_area(radiu, PI=3.14):
'''
求圆的面积
'''
return radiu * radiu * PI
print(get_circle_area(1, 3.14))
print(get_circle_area(2))
2.可变参数(不定长参数)
在开发时,我们往往有时候可能存在,传递非常多的参数
采用元组作为封装数据类型
def get_circle_area(radiu, PI=3.14, *args):
'''
求圆的面积
'''
print(args)
if len(args) >= 1:
print(args[0])
return radiu * radiu * PI
print(get_circle_area(1, 3.14))
print(get_circle_area(2))
print(get_circle_area(3, 3.14, 10, 23, 67, 8))
3.关键字参数(命名参数)
采用字典作为封装数据类型
def get_circle_area(radiu, PI=3.14, *args, **kwargs):
'''
求圆的面积
'''
print(kwargs)
if len(kwargs) >= 1:
print(kwargs.get('name',"无名氏"))
return radiu * radiu * PI
print(get_circle_area(1, 3.14))
print(get_circle_area(2))
print(get_circle_area(3, 3.14, 10, 23, 67, 8))
print(get_circle_area(4, 3.14, 10, 23, 67, 8, name="长安",age=20 ))
六.匿名函数
如果python,存在函数作为参数传递函数,又不想外界访问,而且参数函数足够简单,建议定义为匿名函数(lambda表达式)
lambda [arg1, arg2]:函数体
def print_msg(fn, msg):
fn(msg)
# def test(info):
# print(info)
print_msg(lambda msg: print(msg), "你好,匿名函数!")
七.python 3.8的新特性
声明函数参数类型:python是一门弱数据类型语言
def add(x:int, y:float) -> float:
return x + y
print(add(5, 8))
八.递归(Recurresion)
函数自身调用自身
#求斐波那契数列
def fibonacci(n):
if n == 1:
return 0
if n == 2:
return 1
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(3))
print(fibonacci(4))
print(fibonacci(5))
print(fibonacci(6))