Python总结,定义函数(3)

简介: Python总结,定义函数(3)

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回,请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。


定义一个函数


你可以定义一个由自己想要功能的函数,以下是简单的规则:


函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。

任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

函数内容以冒号 : 起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

1675244476865.jpg

自定义错误输出


我们自己定义的函数错误与内置函数输出错误不一样

比如下面定义一个my_abs等于abs,输出错误看下

自定义求绝对值函数

def my_abs(x):
    if x > 0:
        return x
    else:
        return -x
print(my_abs('9'))  #填入字符串


输出错误:



Traceback (most recent call last):
  File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 7, in <module>
    print(my_abs('9'))  #填入字符串
  File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 3, in my_abs
    if x > 0:
TypeError: '>' not supported between instances of 'str' and 'int'


内置绝对值函数:

print(abs('9'))

输出错误:

Traceback (most recent call last):
  File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 1, in <module>
    print(abs('9'))
TypeError: bad operand type for abs(): 'str'


如果想自定义错误输出,就可以使用数据类型检查内置函数isinstance()实现:

def my_print(x,y,z):
    if not isinstance(x,(int,float)):
        raise TypeError('类型输入错误,请输入int或者float类型')
    nx = y + z
    ny = x + z
    nz = x + y
    return nx,ny,nz
print(my_print('1','2','3'))


输出错误:

Traceback (most recent call last):
  File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 8, in <module>
    print(my_abs('1','2','3'))
  File "C:/Users/Eden/PycharmProjects/pythonProject1/main.py", line 3, in my_abs
    raise TypeError('类型输入错误,请输入int或者float类型')
TypeError: 类型输入错误,请输入int或者float类型


默认输出


必选参数在前,默认参数在后,当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。


当不给z赋值时,默认z等于3

def my_print(x,y,z=3):
    if not isinstance(x,(int,float)):
        raise TypeError('类型输入错误,请输入int或者float类型')
    print(x,y,z)
    return x,y,z
print(my_print(100,200))                   #不给z赋值,输出:100,200,3


不定长参数


一个*代表元组


你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名。基本语法如下:


/

def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]


加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

实例(Python 3.0+)
#!/usr/bin/python3
# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vartuple)
# 调用printinfo 函数
printinfo( 70, 60, 50 )


以上实例输出结果:


输出:

70
(60, 50)

如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下实例:

实例(Python 3.0+)
#!/usr/bin/python3
# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   for var in vartuple: #遍历元组
      print (var)
   return
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )


以上实例输出结果:


输出:
10
输出:
70
60
50


还有一种就是参数带两个星号 **基本语法如下:

def functionname([formal_args,] **var_args_dict ):
   "函数_文档字符串"
   function_suite
   return [expression]


两个*代表字典

加了两个星号 ** 的参数会以字典的形式导入。

实例(Python 3.0+)
#!/usr/bin/python3
# 可写函数说明
def printinfo( arg1, **vardict ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vardict)
# 调用printinfo 函数
printinfo(1, a=2,b=3)


以上实例输出结果:

输出:
1
{'a': 2, 'b': 3}


单独写*代表*后的参数必须用关键字传入

声明函数时,参数中星号 * 可以单独出现,例如:

def f(a,b,*,c):
    return a+b+c

如果单独出现星号 * 后的参数必须用关键字传入。

>>> def f(a,b,*,c):
...     return a+b+c
... 
>>> f(1,2,3)   # 报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() takes 2 positional arguments but 3 were given
>>> f(1,2,c=3) # 正常
6
>>>


不可变类型在函数中值不会被改变


int类型是不可变类型,列表是可变类型,所有下面的例子中n1的值没有被修改



def fun(a,b):
    a = 3
    b.append(10)
n1 =1
n2 =[8,9]
fun(n1,n2)
print(n1,n2)
相关文章
|
4天前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
153 99
|
4天前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
138 98
|
8天前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
2月前
|
PHP Python
Python format()函数高级字符串格式化详解
在 Python 中,字符串格式化是一个重要的主题,format() 函数作为一种灵活且强大的字符串格式化方法,被广泛应用。format() 函数不仅能实现基本的插入变量,还支持更多高级的格式化功能,包括数字格式、对齐、填充、日期时间格式、嵌套字段等。 今天我们将深入解析 format() 函数的高级用法,帮助你在实际编程中更高效地处理字符串格式化。
258 0
|
27天前
|
Python
Python 函数定义
Python 函数定义
91 1
|
16天前
|
算法 安全 数据安全/隐私保护
Python随机数函数全解析:5个核心工具的实战指南
Python的random模块不仅包含基础的随机数生成函数,还提供了如randint()、choice()、shuffle()和sample()等实用工具,适用于游戏开发、密码学、统计模拟等多个领域。本文深入解析这些函数的用法、底层原理及最佳实践,帮助开发者高效利用随机数,提升代码质量与安全性。
83 0
|
29天前
|
数据挖掘 数据处理 C++
Python Lambda:从入门到实战的轻量级函数指南
本文通过10个典型场景,详解Python中Lambda匿名函数的用法。Lambda适用于数据处理、排序、条件筛选、事件绑定等简洁逻辑,能提升代码简洁性和开发效率。同时提醒避免在复杂逻辑中过度使用。掌握Lambda,助你写出更高效的Python代码。
113 0
|
2月前
|
索引 Python 容器
[oeasy]python096_列表_计数函数_count
本教程详细介绍了Python中列表的计数方法`count`,包括其基本用法、与`len`函数的区别,以及如何结合索引操作查找和删除特定元素。同时探讨了字符串对象的`count`方法,并通过实例演示了如何统计字符出现次数。
59 7
|
2月前
|
机器学习/深度学习 数据处理 索引
Python内置函数:面试通关的49个秘密武器
本文精选49个Python高频面试内置函数,涵盖数值处理、类型转换、序列操作、字典集合、函数式编程及高级特性,结合真实代码案例解析底层逻辑与应用场景,助你提升开发效率,轻松应对技术面试。
61 1
|
1月前
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。

推荐镜像

更多