python中的函数

本文详细介绍了Python中的函数概念,包括函数的作用、语法结构、定义与调用、内置函数与自定义函数、参数分类(位置参数、默认参数和可变长参数)等内容,旨在提升编程效率和代码可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 函数简介

Python中的函数是一段可重复使用的代码块,可以接受输入(参数),并且可以输出结果。使用函数可以将复杂的逻辑代码分解成小块,使得程序更加清晰、易读、易于维护。函数定义使用关键字def,语法为:

def function_name(parameters):
    """docstring"""
    # 函数体
    return [expression]

目前我们所遇到的问题:1.我们现在所写的代码冗余度较高,需要重写代码,

2.目前所写的代码兼容性太差。函数其实就是一个工具箱,什么时候使用就拿出来使用,内部封装了一些功能,需要哪里就使用哪里。

二.函数的语法结构

def function_name(parameters):
    """docstring"""
    # function body
    return [expression]
  • def 是定义函数的关键字;
  • function_name 是函数的名称,遵循变量命名规则;
  • parameters 是函数的参数列表,可以为空;
  • docstring 是对函数的描述,可以为空;
  • function body 是函数的代码块,用于完成特定的功能;
  • return 是返回结果的关键字,可以省略。
  • 返回值是可选的,可有可无,但是一般情况下都有。
  • 一个函数只有一个返回值。

三.函数的定义与调用

1.函数必须先定义后调用,没有定义的函数一定是不能调用的。

2.函数在定义阶段,只能检测出语法是否错误,不会键检测逻辑会不会有问题。

3.逻辑上的错误只会在调用状态下检测

4.函数一定是被调用后才会执行内部函数的代码块,不调用函数一定不会执行函数的。

1.如何调用函数

函数名 () 只要函数名加括号一定会执行函数代码块,函数如果在定义阶段有参数,那么再调用的时候,连参数一块写上

2.函数调用的内部原理

1.先再内存地址中申请代码块的内存地址储存代码块

2.把函数名和函数体所在的空间地址绑定在一起

3.通过函数名()就可以访问到所在的函数代码即可

四.函数的分类

1,内置函数

pyhton 解释器中原本就存在的函数,可以直接拿来用,不需要定义,直接拿来用即可:

Python解释器中内置的函数有很多,以下是部分常用的内置函数列表:

1. print():输出函数,将指定的值或变量打印到控制台上。

2. input():输入函数,接受用户的输入并返回一个字符串。

3. type():类型函数,返回一个对象的类型。

4. len():长度函数,返回一个序列对象的长度。

5. range():生成一个序列,返回一个包含指定范围内的所有整数的序列。

6. int():将一个字符串或数值转换为整数。

7. float():将一个字符串或数值转换为浮点数。

8. str():将一个对象转换为字符串。

9. list():将一个序列对象转换为列表。

10. tuple():将一个序列对象转换为元组。

11. dict():将一个序列对象转换为字典。

12. set():将一个序列对象转换为集合。

13. abs():返回一个数的绝对值。

14. max():返回一个序列对象中的最大值。

15. min():返回一个序列对象中的最小值。

16. sum():返回一个序列对象中所有数的和。

17. pow():返回一个数的指数幂。

18. round():将一个数四舍五入到指定的精度。

19. bin():将一个整数转换为二进制字符串。

20. hex():将一个整数转换为十六进制字符串。

21. oct():将一个整数转换为八进制字符串。

22. chr():将一个Unicode编码转换为字符。

23. ord():将一个字符转换为Unicode编码。

24. enumerate():返回一个枚举对象,产生一个元素和一个计数器,这个计数器可以用来追踪迭代次数。

25. zip():将多个序列对象并行地组合成一个元组列表。

2.自定义函数

程序员自己写的函数,必须先定义,后调用

1.无感参数:函数在定义阶段没有参数 

def my_len():
    pass
my_len()

2.有感参数:函数在定义中有参数的存在

def my_len(a, b):
            pass
my_len(1,2)

3.空参数

空函数
    	def my_len():
            pass

3.函数的返回值(return)

函数关键字:retrun

def home():
    print(1,2,3)
    #retrun就走到这
   #print('hello')
    return 1,2,3 # 1,2,3

def home():
    print(1,2,3)
    return 1,2,3
res =home()
print(res)
print(res[1])
##1 2 3
(1, 2, 3)
2

注:1.每个函数不是必须都要返回值的,它是可有可无的

     2.当函数中只有关键字retrun时,它的后面才是函数返回值的结果

     3.一个函数中只能有一个retrun关键字,函数体代码遇到retrun就会直接退出。

     4.retrun关键字后面可以跟多个返回值,使用逗号隔开。以元组的形式展开。

五. 函数参数的两大分类(形式i参数,实际参数)

1. 形式参数

 1.定义: 函数在定义阶段时,括号里的变量名就是形式参数,简称"形参"

def my_home(a,b):
       pass
# a,b就是形式参数

2. 实际参数

1.定义: 函数在调用阶段时,括号里的变量值就是实际参数,简称'实参'

def home(a,b):
    print(a,b)
home(1,2) #就是实际参数
3.形参与实参直接的关系

实参和形参的关系我们可以看做变量名————>变量值直接的关系,那么形参和实参的关系就是

形参(变量名)————实参(变量值)的形式。

形参和实参是在函数调用期间,临时绑定,当调用结束时,两者断开。

注:函数形参其实就只有变量名这一中情况,但实参确有好几种情况:变量值,变量名,返回值等,但实际就是变量值。

4.位置参数

1. 位置参数就是:函数在括号中从左往右依次写入的参数(实参),就是位置参数

def home(a,b ,c):##这就是位置参数(实参)
    print(a,b,c)
home(1,2,3)

2.位置形参就是:在函数调用时括号中从左往右写入的变量值(形参)就是位置形参

def home(a,b ,c):
    print(a,b,c)
home(1,2,3)###这就是位置形参

注:位置参数(实参)与位置形参是一一对应的。

5.默认参数

定义:在函数的定义阶段已经给形参赋予了变量值。

1 .如果在定义函数时,给形参赋予值之后,调用函数时,如果未定义,则为使用默认的参数,

2. 如果在调用函数时,定义了变量值,那么默认的参数将不在使用。

def register(name, age, gender='male'):
    print("name:%s,age:%s,gender:%s" % (name, age, gender))
register('kiki', 18)##当默认参数定义,实参没有定义时


def register(name, age, gender='male'):
    print("name:%s,age:%s,gender:%s" % (name, age, gender))
register('kiki', 18, 'female')##当实参有定义时

注:当函数在定义阶段,给的默认值在定义后,后续就不会再改变了

m = 200
def register(a, b, n = m ):

    print(a, b, n)
m =400
register(1, 2)##1,2,200最后结果还是200,定义的值不能被改变
6.可变长参数

1.无论输入多少个位置参数,函数都可以被正常调用

def index(x,y,m,n,*a):
    print(x,y,m,n,a)
index(1,2,3,4,5,6,7,8,9)##1 2 3 4 (5, 6, 7, 8, 9)返回的结果,*a位置使用了元组给括了起来

2.无论输入多少关键字参数,函数都可以被正常调用

def index(x,y,m,n,**a):
    print(x,y,m,n,a)
index(x=1, y=2, m= 3, n=4, zz=22, e=23)##1 2 3 4 {'zz': 22, 'e': 23}
##**a前面的正常使用位置参数对应,后面的使用字典给括起来

* 和**后的变量名随意,但是,在python中,推荐使用:*args **kwargs

args:位置参数,kwargs:关键字参数

3.无论使用多少的关键字和位置参数,都能够被正常的调用

def index(a, b, m=2, *args, **kwargs):
    print(args)
    print(kwargs)
index(1, 2, 3, 4, x=10, y=20, z=30)
##(4,)
{'x': 10, 'y': 20, 'z': 30}

4.可变长参数(*和**号)在实参中得使用:

def index(a, b, *args):
    print(a, b, args)
ll = (11, 22, 33, 555, 44,449 )
index(*ll)##11 22 (33, 555, 44, 449)




def index(*args):
    print(args)
# ll = (11, 22, 33, 555, 44,449 )
# index(*ll)
d = {'name': 'kiki', 'age': 18}
index(*d)
字典只能返回key值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值