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

版权声明:未经允许,禁止二次发布!本文链接: https://blog.csdn.net/qq_39973546/article/details/79953361

Jupyter QtConsole 4.3.1

Python 3.6.3 |Anaconda custom (32-bit)| (default, Oct 15 2017, 07:29:16) [MSC v.1900 32 bit (Intel)]

Type 'copyright', 'credits' or 'license' for more information

IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help.


In [1]:


In [1]:


In [1]:


In [1]: #欢迎来到“只读课堂”!往期课程和Python资料包请找QQ:1649643021,我们的学习交流群:206527832

   ...: #今天我们来学函数的构成。

   ...: #下面来举个例子:

   ...:


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



In [89]:

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页