Python入门第19课——深入函数(只读课堂)

    科技2022-07-16  121

    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教程就到这了,欢迎继续收看!

    Processed: 0.009, SQL: 8