深度解读python的函数(一)

简介: 深度解读python的函数(一)

函数

概念:功能 (包裹一部分代码 实现某一个功能 达成某一个目的)

特点:可以反复调用,提高代码的复用性,提高开发效率,便于维护管理

#Python函数的基础知识

函数是一段具有特殊功能的、可重用的语句组。(将代码封装起来)

定义:def(定义一个函数)关键词开头,空格之后接函数名称和圆括号(),最后还有一个“:”。

def是固定的,不能变,必须是连续的def三个字母,不能分开。

空格 为了将def关键字和函数名称分开,必须空。

函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。

虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并表达函数功能。

括号:必须要有;

注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

调用:就是函数名() 一定要加上括号。

1.函数基本格式

#定义一个函数

def 函数名():

code1

code

#调用函数

函数名()

#定义函数

def func():

print("我是一个函数 … ")

#调用函数

func()

#函数定义

def my_len():
"""计算s1的长度"""
s1 = "hello world"
length = 0
for i in s1:
length = length+1
print(length)
#函数调用
my_len()

函数的定义和调用

注:只定义函数而不调用,函数就不执行。

2.函数的命名

字母数字下划线,首字符不能为数字

严格区分大小写,且不能使用关键字

函数命名有意义,且不能使用中文哦

驼峰命名法:

(1) 大驼峰命名法: 每个单词的首字符要大写 (类的命名)

mycar => MyCar

(2) 小驼峰命名法: 除了第一个单词首字符小写外,剩下单词首字符大写 (函数或者变量)

mycar => myCar

_命名法:可以将不同的单词用_拼接在一起

mycar => my_car

symmetric_difference symmetricDifference SymmetricDifference

#函数定义

def cfb_99():
    for i in range(1,10):
        for j in range(1,i+1):
            print("{:d}*{:d}={:2d} ".format(i,j,i*j) ,end="")
        print()

#调用函数,打印多次,可以循环调用

for i in range(5):
    cfb_99()

函数写出乘法口诀

3.函数的参数

参数: 函数运算时需要的值

参数种类:

(1)形参: 形式参数,在函数的定义处

(2)实参: 实际参数,在函数的调用处

形参的种类:

1.普通形参(位置形参) 2.默认形参 3普通收集形参 4.命名关键字形参 5.关键字收集形参

实参的种类:

1.普通实参(位置实参) 2.关键字实参

原则:

形参和实参要一一的对应

1.普通形参(位置形参)

#定义函数

"""hang,lie普通形参,在函数定义处"""
def small_star(hang,lie):
    i = 0
    while i < hang:
        j = 0
        while j < lie:
            print("*",end="")
            j +=1
        print()
        i += 1

#调用函数

“”“10,10普通实参,在函数的调用处”“”

small_star(10,10)
small_star(2,3)

2.默认形参

“”“hang,lie默认形参,在函数定义处”“”

“”"

如果给予实参,那么使用实参

如果没有给予实参,那么使用参数身上的默认值

“”"

def small_star(hang=10,lie=10):
    i = 0
    while i < hang:
        j = 0
        while j < lie:
            print("*",end="")
            j +=1
        print()
        i += 1

small_star(4,8)
small_star(8)
small_star()

默认形参,调用时带有实参时,就按实参运行,不带实参就按默认的形参值运行

传一个实参,给第一个形参赋值

3.普通形参 + 默认形参

“”“定义参数时,普通(位置)形参必须写在 默认形参 的前面 不能调换位置”“”

def small_star(hang,lie=10):
    i = 0
    while i < hang:
        j = 0
        while j < lie:
            print("*",end="")
            j +=1
        print()
        i += 1
small_star(5,7)
# small_star(5)
# small_star() error

普通形参必须传值,否则报错

4.关键字实参

print(“<=============>”)

“”"

1.如果都是关键字实参,可以任意调整实参的顺序

2.普通实参必须写在关键字实参的前面

"""
def small_star(hang,a,b,c,lie=10):
    i = 0
    while i < hang:
        j = 0
        while j < lie:
            print("*",end="")
            j +=1
        print()
        i += 1

# hang a ... lie 具体指定参数的值 叫做关键字实参, 在函数的调用处赋值;
# small_star(hang=3,a=4,b=5,c=6,lie=7)
# small_star(b=5,c=6,lie=7,a=4,hang=3)    #全部使用关键字实参,可以任意调整实参顺序
small_star(3,4,b=5,c=6,lie=7)                     #普通实参与关键字实参同时存在,普通实参必须在关键字实参前面
small_star(3,4,b=5,lie=7,c=6)
# small_star(b=5,c=6,lie=7,3,4) error

5.收集参数

(1) 普通收集形参: 专门用来收集那些多余的没人要的普通实参

收集之后,会把多余实参打包成一个元组

定义的时候,参数头上1个星星。调用的时候不用加星星

如果没有定义收集普通形参,那么实参个数一定得与形参数量一致,既不能多,也不能少,不然报错。

定义了收集普通形参,实参个数就没有限制了。但普通收集普通形参,只能收集位置参数,不能收集

关键字参数

def func(*args):    args不是固定的,可以任意起名
    pass
    args => arguments
"""
def func(a,b,c,*args):           #定义的时候加*
    print(a,b,c) # 1 2 3     
    print(args)  # (4,5,6)    #调用的时候不加*

func(1,2,3,4,5,6)

打印args,是一个元祖

#计算任意个数值得累加和
def mysum(*args):
    total = 0
    for i in args:
        total += i
    print(total)
mysum(1,2,3,4,4,45,10,100)

收集普通实参,获得的是个元祖,可以针对元祖做相关运算

(2) 关键字收集形参: 专门用来收集那些多余的没人要的关键字实参

收集之后,会把多余关键字实参打包成一个字典

参数头上有2个星星

收集关键字形参,只能收集关键字实参,不能收集位置实参

def func(**kwargs):     kwargs也是自己定义的
    pass
    kwargs => keyword arguments


def func(a,b,c,**kwargs):
    print(a,b,c)
    print(kwargs) # {'f': 100, 'e': 200, 'z': 12}
func(c=1,a=3,b=10,f=100,e=200,z=12)

收集关键字形参,只能收集关键字实参

#拼接任意个数值变成字符串
"""
班长: 赵万里
班花: 马春陪
划水群众: 赵沈阳,李虎凌,刘子涛
"""
def func(**kwargs):
    strvar1 = ""
    strvar2 = ""
    # 定义职位信息
    dic = {"monitor":"班长","classflower":"班花"}
    print(kwargs)
    # 共5次循环
    for k,v in kwargs.items():
        if k in dic:
            # 将2次循环的结果通过+= 拼接在一起
            strvar1 += dic[k] + ":" + v + "\n"            
        else:
            # 将3次循环的结果通过+= 拼接在一起
            strvar2 += v + " , "
    print(strvar1.strip())
    print("划水群众:",strvar2.strip(" , "))
        
    """
    # print(k,v)
    k       v
    monitor 赵万里
    classflower 马春陪
    water1 赵沈阳
    water2 李虎凌
    water3 刘子涛
    {'monitor': '赵万里', 'classflower': '马春陪', 'water1': '赵沈阳', 'water2': '李虎凌', 'water3': '刘子涛'}
    """

func(monitor="赵万里",classflower="马春陪",water1="赵沈阳",water2="李虎凌",water3="刘子涛")

深度解读python的函数(二):https://developer.aliyun.com/article/1495708

相关文章
|
22天前
|
Python
【python从入门到精通】-- 第五战:函数大总结
【python从入门到精通】-- 第五战:函数大总结
56 0
|
19天前
|
Python
Python之函数详解
【10月更文挑战第12天】
Python之函数详解
|
20天前
|
存储 数据安全/隐私保护 索引
|
10天前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
11天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
14天前
|
Python
python的时间操作time-函数介绍
【10月更文挑战第19天】 python模块time的函数使用介绍和使用。
19 4
|
16天前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
13 1
|
21天前
|
索引 Python
Python中的其他内置函数有哪些
【10月更文挑战第12天】Python中的其他内置函数有哪些
13 1
|
1月前
|
数据处理 Python
深入探索:Python中的并发编程新纪元——协程与异步函数解析
深入探索:Python中的并发编程新纪元——协程与异步函数解析
25 3
|
1月前
|
机器学习/深度学习 算法 C语言
【Python】Math--数学函数(详细附解析~)
【Python】Math--数学函数(详细附解析~)