In [1]: #欢迎来到“只读课堂”!
...: #今天我们来学函数的构成。
...: #下面来举个例子:
...:
In [2]: 1+2
Out[2]: 3
In [3]: a = 1
In [4]: b = 2
In [5]: a + b
Out[5]: 3
In [6]: #万一有一天,a不等于1了呢
In [7]: #这样写就非常麻烦,写代码的效率是很低的。
In [8]: #而函数,可以更快的展开:
In [9]: def func(x,y)
File "<ipython-input-9-883d79ecb2e6>", line 1
def func(x,y)
^
SyntaxError: invalid syntax
In [10]: def func(x,y):
...: return x+y
...:
In [11]: func(3,5)
Out[11]: 8
In [12]: func(6,7)
Out[12]: 13
In [13]: func(10,11)
Out[13]: 21
In [14]: #这样是不是非常的快呢?
In [15]: #它还可以把我们想要的东西封装起来,并不用像普通代码那样重新写。这就是函数的意义。
In [16]: #def语句在运行的时候创建一个新的函数对象并且赋值给一个变量名
...: #一个def语句可以出现在任一语句可以出现的地方(python中所有的语句都是实时运行的,没有编译这样的流程),甚至嵌套在其它的语句中
...: #比如,汉书还可以这样,嵌套在if语句中实现不同的函数定义,这也是合法的。
...:
In [17]: a = 1
In [18]: if a == 1:
...: def func():
...: print('a == 1')
...: else:
...: def func():
...: print(a != 1')
File "<ipython-input-18-825ce4fc2601>", line 6
print(a != 1')
^
SyntaxError: EOL while scanning string literal
In [19]: if a == 1:
...: def func():
...: print('a == 1')
...: else:
...: def func():
...: print('a != 1')
...:
In [20]: func()
a == 1
In [21]: #——————————————————————————————————————————————————————————————————————
In [22]: #参数·1
In [23]: #形参:定义函数时函数名后面圆括号中的变量名称叫做形式参数,简称为形参。
...: #实参:在调用函数时,向函数内部传递的值,称为实际参数,简称实参。
...:
...: #必备参数:必备参数必需以正确的顺序传入函数,调用时数量必需和声明时的一样。
...: #命名参数:我们可以打乱顺序传递参数,也就是确定的传入参数值,可以跳过不传的参数值。
...: #缺省参数:也叫默认参数,默认参数的设置一定是从右向左的。
...: #不定长参数:有些时候,可能我们的函数需要更多的值,但是无法在形参处确定,那么你需要试用不定长传参的方式。
...:
In [24]: #举个例子:
In [25]: #形参:
In [26]: def func(x,y):
...: print(x+y)
...:
In [27]: #实参:
In [28]: func(1,2)
3
In [29]: #必备参数:
In [30]: func(1)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-30-db72e56561b1> in <module>()
----> 1 func(1)
TypeError: func() missing 1 required positional argument: 'y'
In [31]: #没有一个完整确切的值,它就会报错。
In [32]: #命名参数:
In [33]: func(y=1,x=2)
3
In [34]: #使用命名传参就可以打乱顺序,还可以正常执行。
In [35]: #缺省参数:
In [36]: def func(name='xiaoming',age):
...: print('name:',name)
File "<ipython-input-36-e571d50957d0>", line 1
def func(name='xiaoming',age):
^
SyntaxError: non-default argument follows default argument
In [37]: #你会发现,它报错了。
In [38]: #因为定义的时候应该把缺省参数写到后面,不然就错了。
In [39]: func(10)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-39-d332eac34e63> in <module>()
----> 1 func(10)
TypeError: func() missing 1 required positional argument: 'y'
In [40]: #我们应该这样定义:
In [41]: def func(age,name='小明'):
...: print(name,':',age)
...:
In [42]: #这样的一个函数是没问题的。
In [43]: func(10)
小明 : 10
In [44]: func(20)
小明 : 20
In [45]: #假如不叫小明:
In [46]: func(10,'小红')
小红 : 10
In [47]: #就覆盖掉了。
In [48]: #不定长参数:
In [49]: def func(*a):
...: print(a)
...:
In [50]: #这样function就可以接收很多很多值
In [51]: func(1,2,3,4,5,65,7)
(1, 2, 3, 4, 5, 65, 7)
In [52]: #你会发现用了*号就可以无限长。
In [53]: def func(**var):
...: print(var)
...:
In [54]: func(a=1,b=2,c=3)
{'a': 1, 'b': 2, 'c': 3}
In [55]: #**var可以接收一些值,并且把它包装成一个字典。
In [56]: #这就是不定长参数。
In [57]: #——————————————————————————————————————————————————————————————————————
In [58]: #返回值
In [59]: #return 可以返回任意种类的对象,同时也能返回多个值。
...: #def func():
...: # return(1,2)
...: #看起来这里的代码好像返回两个值,实际上只有一个,一个包含2个元素的元祖,它的圆括号是可选的,这里省略了函数可以返回一个对象或是值,在返回一个容器对象的时候有点不同,比如列表,看起来就像是返回了多个对象。
...:
In [60]: def func():
...: return 1
...:
In [61]: func()
Out[61]: 1
In [62]: def func():
...: pass
...:
In [63]: #这只是个站位
In [64]: func()
In [65]: #就没有值。
In [66]: def func():
...: return 1,2
...:
In [67]: func()
Out[67]: (1, 2)
In [68]: var = func()
In [69]: type(var)
Out[69]: tuple
In [70]: var
Out[70]: (1, 2)
In [71]: #它会把几个值包装起来
In [72]: var,var1 = func()
In [73]: var
Out[73]: 1
In [74]: var1
Out[74]: 2
In [75]: #它只能两个值。
In [76]: #——————————————————————————————————————————————————————————————————————
In [77]: #多态
In [78]: #def mult(x,y):
...: # return(x*y)
...: #我们可以看到表达式中的x*y完全取决于x和y的对象类型,同样的函数,在不同参数传递的时候做不同的操作
...: #*号针对正被处理的对象进行了随机应变,这种行为就称为多态。
...:
...: #多态:一个操作的意义,取决于被操作对象的类型。
...:
In [79]: #下面举个例子:
In [80]: 'abc' + 'def'
Out[80]: 'abcdef'
In [81]: 1 + 2
Out[81]: 3
In [82]: #在python中,它只作对数值相加。
In [83]: print(1)
1
In [84]: print('abc')
abc
In [85]: #这样也算是“多态”。
In [86]: #——————————————————————————————————————————————————————————————————————
In [87]: #好,这节课就学到这里,我们下节课再见!
In [88]: print("\n本次“只读课堂”的python教程就到这了,欢迎继续收看!\n")
本次“只读课堂”的python教程就到这了,欢迎继续收看!