python-函数入门(一)

简介: 1.什么是函数: 可重复使用的,用来实现单一,或相关联功能的代码段。 函数分为内置函数和自定义函数,这里先讲自定义函数 2.如何定义函数: #语法 def 函数名(参数1,参数2,参数3,.

1.什么是函数:

可重复使用的,用来实现单一,或相关联功能的代码段。

函数分为内置函数和自定义函数,这里先讲自定义函数

2.如何定义函数:

#语法
def 函数名(参数1,参数2,参数3,...):
    '''注释'''
    函数体
    return 返回的值

注:函数必须先定义才能使用,定义阶段不执行代码只检测语法.意思就是语法错误在定义阶段就会检测出来,代码的逻辑错误只有在执行时才会提示.

3.定义函数的三种形式

无参:用于执行一些打印等操作,不需要参数传进去

有参:需要根据传进去的参数进行运算

空函数:用于设计代码结构

#     1.无参函数
# def foo():
#     print('from foo')
# foo()
#     # 2.有参函数
# def bar():
#     print(x,y)
# bar(1,2)
#     # 3,空函数
# def func():
#     pass

4.函数调用

函数调用就是函数名加个()即可

4.1调用函数的三种形式:

# 1.语句形式
# def foo():
#     print('from foo')
# foo() 
#
# 2.表达式形式
# def foo(x,y):
#     res = x+y
#     return  res
# res = foo(1,2) 

# 3.可以当做参数传给另外一个函数
# def max2(x,y):
#     if x>y:
#         return x
#     else:
#         return y
# res = max2(max2(1,2),3)
# print(res)

4.2函数的返回值

1.返回值没有类型限制

2.返回值没有个数限制

注:返回多个值的结果就是返回一个元组,0个值返回为None

return是函数结束的标准,可以有多个return但只执行一次

# def f1():
#     print('111')
#     return 1
#     print('222')
#     return 2
#     print('333')
#     return 3
#def f1()
#只执行 print('111')

4.3函数的参数

函数的参数分为形参和实参.形参即为变量名,实参为变量值,在函数调用时,把值绑定到变量名上,在函数调用结束后,解除绑定

形参与实参的具体分类(重点)

1.位置参数

1.1位置形参

  在定义函数阶段按照从左到右的顺序定义的形参.   注:按位置定义的形参必须被传值,多一个不行,少一个也不行

# def foo(x,y)
#     print(x,y)
#
# foo(1,2)    #正确
# foo(1,2,3) #错误

1.2位置实参

  在调用函数阶段按照从左到右的顺序依次传入的值.

2.关键字参数

  关键字实参:在调用函数阶段,按照key=value的形式指名道姓的为指定值传值

  注:可以完全打乱顺序,仍可以为指定的形参传值

    可以混合使用位置实参和关键字实参,但必须注意(1)位置实参必须放在关键字实参前面(2)不能对一个形参重复赋值

 

def foo(name,age):
    print(name,age)

foo('zfj',18)
foo(age=18,name='egon')
# foo(name='zfj',18)#报错
# foo('zfj', age=18)

 

3.默认参数

  指的是在定义阶段就已经为某个形参赋值了,该形参称之为有默认值的形参

注意:1.在定义阶段就已经被赋值,意味着在调用阶段就可以直接使用,默认参数

   2.位置形参应该放到默认形参前面

   3.默认参数的值,通常应该为不可变类型

 

def foo(x,y=2):
    print(x,y)
foo(1)#1,2
foo(1,3)#1,3

 

4.可变长度参数

  站在实参的角度,参数长度可变指的是在调用函数时,传入的实参的值个数不固定

  4.1在形参中带“*”:会将调用函数时溢出的位置实参保存为元组的形式,然后赋值给*后的变量

def foo(x,y,*z):
    print(x,y,z)
foo(1,2,3,4,5)#1 2 (3, 4, 5)

  4.2在形参中带“**”:会将调用函数时溢出的关键字实参保存成字典的形式,然后赋值给**后的变量名

def foo(x,y,**z):
    print(x,y,z)
foo(1,2,a=1,b=2)#1 2 {'a': 1, 'b': 2}

  4.3在实参中带“*”:在传值前先被打散成位置实参,然后再进行赋值

def foo(x,y,*z):
    print(x,y,z)
foo(1,*[2,3,4,5,6])#1 2 (3, 4, 5, 6)

  4.4在实参中带“**”:在传值前先被打散成关键字实参,然后再进行赋值

def foo(x,y,z):
    print(x,y,z)
foo(1,**{'y':2,'z':1})#1 2 1

5.命名关键字参数

放到*与**之间的参数称为命名关键字参数。函数的调用者可以传入任意不受限制的关键字参数

注意:命名关键字参数必须按照key = value的形式传值

 

补充:

在形参中带*与**的,*后的变量名应该为args,**后应该是kwargs

# 当我们想要将传给一个函数的参数格式原封不动地转嫁给其内部的一个函数,应该使用下面这种格式
def bar(x,y,z):
    print(x,y,z)
def wrapper(*args,**kwargs):
    bar(*args,**kwargs)
wrapper(1,2,z=3) #虽然调用的是wrapper,但是要遵循的却是bar的参数标准

 

焚膏油以继晷,恒兀兀以穷年。
相关文章
|
25天前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
67 0
|
6天前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
65 1
|
7天前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
157 99
|
7天前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
141 98
|
11天前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
1月前
|
API 数据安全/隐私保护 开发者
Python自定义异常:从入门到实践的轻松指南
在Python开发中,自定义异常能提升错误处理的精准度与代码可维护性。本文通过银行系统、电商库存等实例,详解如何创建和使用自定义异常,涵盖异常基础、进阶技巧、最佳实践与真实场景应用,助你写出更专业、易调试的代码。
94 0
|
1月前
|
IDE 开发工具 数据安全/隐私保护
Python循环嵌套:从入门到实战的完整指南
循环嵌套是Python中处理多维数据和复杂逻辑的重要工具。本文通过实例讲解嵌套循环的基本用法、常见组合、性能优化技巧及实战应用,帮助开发者掌握其核心思想,避免常见错误,并探索替代方案与进阶方向。
102 0
|
11天前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
77 5
|
30天前
|
Python
Python 函数定义
Python 函数定义
97 1

推荐镜像

更多