Python 函数基础详解

简介: Python 函数基础详解

函数

概念及其优点

将一段具有功能性的代码进行封装,封装到函数中,在哪里实现代码,只需调用当前函数即可。
优点:1.降低代码的冗余量  
   2.提高代码的可读性  
   3.增加代码的重用性

分类

1. 内置函数:python解释器封装好的,直接进行使用函数
  print()   input()  max()   len()   del()  min()   sum()
2. 自定义函数:程序员根据自己程序的需求编写的函数

定义及其调用

定义、调用及其函数文档声明方法

# 定义函数
# 语法格式:
# def 函数名(参数):
#     代码块
# 注意:参数可有可无,根据程序的需求决定是否传参
def func():
  # 函数的声明文档在函数名下以三引号包裹的形式定义
    '''打印 hello wrold '''
    print("hello world")
# 调用func函数
# 语法:函数名(参数)
# 注意:参数可有无可,根据程序的需求决定是否传参
func()
# 获取函数的声明文档   help(函数名)
help(func)

全局变量及局部变量

# 在全局和局部定义相同名字的变量,不产生任何冲突,也不会实现值的覆盖
# 全局变量:定义在函数外,在函数外和函数内都能使用
a = 1
def func():
    # 局部变量:定义在函数内,只能在函数内使用,不能在函数外使用
    # 实现修改全局变量  global 变量名   换行实现对变量进行重新复制
    global a
    a = 2
    print(a)
print(a)
func()
print(a)


函数参数

形参与实参

# 定义函数,函数的功能实现任意两个数字进行求和
# 函数参数分类:
# 形参:形式上的参数,在定义函数时传递形参(变量名)
# 实参:实际上的参数,在调用函数时传递实参(变量值)
def func1(a,b):
    # 函数会对形参进行操作,不会直接使用实参
    print(f"求和的结果为:{a+b}")
func1(5,6)

参数分类

根据传参形式对函数参数进行分类:

位置参数

# 位置参数:形参与实参数量和位置一一对应
def func(a,b):
    print(a+b)
func(5,6)

关键字参数

# 关键字参数:在传递实参时以键=值的形式传递,多个关键字参数之间可以互相打乱顺序
def func(height,weight):
    print(f"我的身高{height},我的体重{weight}")
    
func(weight=180,height=175)

位置参数与关键字参数混合使用时:

# 既有位置参数又有关键字参数,位置参数一定要放在关键字参数之前,否则报错
def func(name,age,gender,height,weight):
    print(f"我的名字叫{name},我的年龄{age},我的性别{gender},我的身高{height},我的体重{weight}")
    
func("张三",18,"男",weight=180,height=175)

缺省参数

# 缺省参数:在传递形参时以键=值的形式传递
# 如果给当前缺省参数传递了实参,直接使用实参的值;如果没有指定实参则使用默认指定的值
def func(name,age,height,weight,gender="男"):
    print(f"我的名字叫{name},我的年龄{age},我的性别{gender},我的身高{height},我的体重{weight}")
    
func("张三",18,180,175,"女")

不定长参数

当不确定实参的数量时,需要使用不定长参数接收所有的实参。

不定长位置参数:

# 不定长位置参数:*args,*接收所有的位置参数,存放在args这个元组里
def func(*args):
    print(sum(args))
    
func(1,4,5,9,6,3,2,8,7,10)

不定长关键字参数:

# 不定长关键字参数:**kwargs,**接收所有的关键字参数,存放kwargs这个字典里
def func(**kwargs):
    print(kwargs)
    
func(name="张三",age=18,gender="保密",height=190,weight=150,phone=110,address="北京警局")

既有位置参数又有关键字参数:

# 既有位置参数又有关键字参数,位置参数要放在关键字参数之前
def func(*args,**kwargs):
    print(args)
    print(kwargs)
    
func("张三",18,"男",height=190,weight=150,phone=110,address="北京警局")


函数返回值

定义

# 函数的返回值
# 语法:return 值
# 如果想要获取函数的返回值    print(调用函数)
# 定义一个函数,函数实现对任意两个数字进行求和
def func(a,b):
    c = a+b
    # print(f"求和的结果为:{c}")
    return c
# 想要获取函数的返回值   print(调用函数)
print(func(5,6))

分类

# 函数返回值
# 1.函数返回一个值   return 值
def func1(a):
    return a**2
print(func1(10))
# 2.函数返回多个值   return 值1,值2,值3……    多个返回值会被存放在元组中展示
def func2(a):
    return a**2,a**3,a*2,a*3
print(func2(10))
# 3.函数返回None  1>.return None   2>.return    3>.不写return
def func3():
    pass
print(func3())
# 4.函数返回函数--->此处涉及到闭包知识点
def outer():
    def inner():
        pass
    return inner

return

# return关键字作用
# 1.将值返回
# 2.结束函数
# 函数功能实现返回数字1-10
def func():
    for i in range(1,11):
        return i
print(func())


函数分类

函数按照参数和返回值进行分类:

# 1.无参数无返回值的函数
def func():
    print("无参数无返回值的函数")
func()
-------------------------------
# 2.无参数有返回值的函数
def func2():
    return "无参数有返回值的函数"
print(func2())
--------------------------------
# 3.有参数无返回值的函数
def func3(a):
    print(f"有参数无返回值的函数,参数为:{a}")
func3(10)
-----------------------------------------
# 4.有参数有返回值的函数
def func4(x):
    return f"有参数有返回值的函数,参数为:{x}"
print(func4(6))

关于函数的补充

拆包

概念

拆包:需要拆的数据的个数要与变量的个数相同,否则程序会异常

可拆包的数据类型:字符串、列表、元组、字典(拆包的结果是键)

# 对字符串类型的数据进行拆包
a,b,c,d,e = "hello"
print(a)    # h
# 对列表类型的数据进行拆包
list1,list2 = [1,2]
print(list2)   # 1
# 对元组类型的数据进行拆包
tuple1,tuple2 = ("hello","world")
print(tuple2)   # "hello"
# 对字典类型的数据进行拆包-->字典拆包的结果是键
dict1,dict2 = {"name":"张三","age":18}
print(dict2)   # "age"
dict3 = {"name":"李四","age":16,"gender":"女"}
# 获取字典的键值对--->多个临时变量接收数据就是在执行拆包操作
for i,j in dict3.items():
    print(i)
# 定义一个函数,任意传递一个整数,函数返回值  平方、立方、2倍数、3倍数
def func(x):
    return x**2,x**3,x*2,x*3
a,b,c,d = func(10)

交换变量的值

实现交换变量的值

a = 10
b = 20
# 第一种方式:借助第三个变量
c = a   # c=10
a = b   # a=20
b = c   # b=10
print(a,b)
# 第二种方式:一次性定义多个变量
a,b = b,a
print(a,b)

斐波那契数列

1 1 2 3 5 8 13 21 34 55 ……
规律:前两个数的和是下一个数的值
定义斐波那契注意:1.必须要有两个初始值  2.满足a,b=b,a+b
一开始    a = 1    b = 1    a+b=2
第一次    a=b=1    b = 2    a+b=3
第二次    a = 2    b = 3     5
综上所述:
斐波那契的规则:a,b = b,a+b
-------------------------------------------
# 输出10个斐波那契数
x = 0
y = 1
for i in range(10):
    x,y = y,x+y
    print(x)

枚举函数

# 枚举函数
# enumerate()
# 语法:enumerate(可迭代对象,start)
# 作用:获取可迭代对象中的每一个数据及对应的序号;序号不指定默认从0开始,可以充当下标;序号通过start参数进行修改
str1 = "hello"
ret = enumerate(str1,start=100)
for i,j in ret:
    # 如果只有一个临时变量,临时变量i接受一个元组  (序号,数据)
    # 如果有两个临时变量,i接收所有的序号,j接收所有的数据(涉及到拆包)
    print(i,j)

for…else…

# for……else
# for循环正常执行结束则执行else中的代码
for i in range(5):
    if i == 4:
        break
    else:
        print(i)
else:
    print("哈哈哈哈哈")
相关文章
|
7天前
|
缓存 监控 程序员
Python中的装饰器是一种特殊类型的声明,它允许程序员在不修改原有函数或类代码的基础上,通过在函数定义前添加额外的逻辑来增强或修改其行为。
【6月更文挑战第30天】Python装饰器是无侵入性地增强函数行为的工具,它们是接收函数并返回新函数的可调用对象。通过`@decorator`语法,可以在不修改原函数代码的情况下,添加如日志、性能监控等功能。装饰器促进代码复用、模块化,并保持源代码整洁。例如,`timer_decorator`能测量函数运行时间,展示其灵活性。
16 0
|
11天前
|
Python
python之print函数
python之print函数
15 0
|
2天前
|
Python
python解包字典到函数参数
【7月更文挑战第5天】
6 2
|
14天前
|
测试技术 开发者 Python
Python中的装饰器:提升函数的灵活性和可重用性
在Python编程中,装饰器是一种强大的工具,它可以在不修改函数本身的情况下,动态地扩展函数的功能。本文将介绍装饰器的工作原理及其在实际开发中的应用,帮助读者更好地理解和利用这一特性。
|
11天前
|
分布式计算 算法 Python
Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
|
13天前
|
存储 Python
在Python中,匿名函数(lambda表达式)是一种简洁的创建小型、一次性使用的函数的方式。
【6月更文挑战第24天】Python的匿名函数,即lambda表达式,用于创建一次性的小型函数,常作为高阶函数如`map()`, `filter()`, `reduce()`的参数。lambda表达式以`lambda`开头,后跟参数列表,冒号分隔参数和单行表达式体。例如,`lambda x, y: x + y`定义了一个求和函数。在调用时,它们与普通函数相同。例如,`map(lambda x: x ** 2, [1, 2, 3, 4, 5])`会返回一个列表,其中包含原列表元素的平方。
26 4
|
14天前
|
JSON 数据格式 索引
Python内置函数如`print()`输出信息,`len()`计算长度
【6月更文挑战第23天】Python内置函数如`print()`输出信息,`len()`计算长度,`type()`识别类型,`range()`生成序列,`sum()`求和,`min()`和`max()`找极值,`abs()`取绝对值,`round()`四舍五入,`sorted()`排序,`zip()`和`enumerate()`组合及遍历,`map()`和`filter()`应用函数。标准库如`os`用于操作系统交互,`sys`处理解释器信息,`math`提供数学运算,`re`支持正则表达式,`json`处理JSON数据。学习这些能提升编程效率。
27 5
|
13天前
|
Python
在Python中,高阶函数是指那些可以接受一个或多个函数作为参数,并返回一个新的函数的函数。
【6月更文挑战第24天】Python的高阶函数简化代码,增强可读性。示例:`map()`检查用户名合法性,如`["Alice", "Bob123", "Charlie!", "David7890"]`;`reduce()`与`lambda`结合计算阶乘,如1到10的阶乘为3628800;`filter()`找出1到100中能被3整除的数,如[3, 6, 9, ..., 99]。
19 3
|
14天前
|
分布式计算 大数据 调度
MaxCompute产品使用问题之为什么用python写的udf函数跑起来比本地还要慢
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。