判断某个对象是否调用,使用内置函数callable
自定义函数:使用关键字def
1、实参
位置实参:基于实参的顺序
关键字实参:在实参中将名称和值关联,无需考虑实参顺序
2、形参
默认值:提供实参,用实参值;没有传实参则使用形参的默认值,先列出无默认值的形参,再列出有默认值的。才能正确地读位置实参。默认值设置为空字符串。
*params
:创建名为 toppings 的空元组,将收到值都封装到这个元组中。可收集任意数量的位置实参,但不会收集关键字参数。
**kwargs
:**
让Python创建名为kwargs的空字典,将收到值对封装到字典中。可收集任意数量的关键字参数
3、文档字符串
在函数体的第一行使用一对三个单引号 ''' 或者一对三个双引号 """ 来定义,将作为函数的一部分存储起来。
使用function.__doc__
访问文档字符串。__doc__
(注意双下划线)是函数的一个属性。
使用惯例:它的首行简述函数功能,第二行空行,第三行为函数的具体描述。
4、递归函数:调用自身
# 这个程序运行一段时间后,会引发异常(调用函数时会消耗一些内存,耗尽所有内存空间后,会导致程序终止并显示‘超过最大递归深度’)。 def recursion(): return recursion() # 这个函数中的递归成为无穷递归
对你有所帮助的递归函数,通常包含下面两部分:
关键:将问题分解为较小的部分,可避免递归没完没了,因为问题终将被分解成基线条件可以解决的最小问题。
案例一:阶乘--计算数字 n 的阶乘。阶乘的数学定义,表述如下:
def factorial(n): if n == 1: return 1 else: return n * factorial(n-1)
案例二:幂--计算一个数字的整数次幂。递归式的定义如下:
def power(x, n): if n == 0: return 1 else: return x * power(x, n-1)
tips:可使用递归完成的任何任务都可使用循环来完成。大多数情况下,使用循环的效率比递归要高。但递归的可读性可能更高,且有时要高很多。
在面向对象编程中,对象意味着一系列数据(属性)以及一套访问和操作这些数据的方法。
使用对象(而非全局变量和函数)的好处:
介绍
__init__()
self
属性
一个类继承继承另一个类时,它将自动获得另一个类的所有属性和方法。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法
子类:
重写:子类中定义与父类方法同名一个方法
实例用作属性:一个Battery的实例用作ElectricCar类的一个属性