02_函数定义及使用函数

01,定义函数

上回说到有没有什么办法,把经常用的功能实现,重复使用且只需叫一声就好

代码如下

02_函数定义及使用函数02_函数定义及使用函数
1 def etc_num():
2     s1 = "wanhaha"
3     s = 0
4     for I in s1:
5         s = s + 1
6     print(s)
View Code

这样可能看的没什么感觉,那就在来一遍,如下

02_函数定义及使用函数02_函数定义及使用函数
1 def num_ret():
2     s1 = "wanhahah"
3     s = 0
4     for I in s1:
5         s = s+1
6     print(s)
7 num_ret()
定义函数及使用

 

总结:

1,关键字def开头中间空格 后面在加函数名函数名后面在加括号在加封号,(def num_ret():)

切记:定义函数必须使用def开头,中间加空格加括号,加封号,这是python的规定

2,函数名:只能包含字符串,下划线,函数名随便起,但是最好使用有意义的名字增加代码可读性

3,调用:调用函数一定要带括号。

 

 

 

 

函数的返回值

刚才我们使用函数得到字符串的长度,那么这和len()方法还是不太一样,我们使用len()都会得到一个值,我们用一个变量来接收这个值

str_len = len("wanhahha")

这个str_len()变量名得到了字符串的长度,那么函数可以做到吗,我们大胆试试!

02_函数定义及使用函数02_函数定义及使用函数
1 def num_ret():
2     s1 = "wanhahah"
3     s = 0
4     for I in s1:
5         s = s+1
6     print(s)
7 func = num_ret()
8 print(func)
View Code

 执行了这段代码,事实证明不行,它给我返回一个Non,那怎么才能得到我们想要的返回值哪

02_函数定义及使用函数02_函数定义及使用函数
1 # 定义函数
2 def func():
3     s1 = "wanhahah"
4     s = 0
5     for I in s1:
6         s = s+1
7     return s
8 ret = func()
9 print(ret)
View Code

 在这段代码里面有一个新的内置函数,就是return,他到底是什么,能干什么,没有它可以吗,

下面继续,go,go,go

return关键字

这个关键字非常重要,return翻译中文的意思是(返回),那么返回有几种情况那

1,一个返回值,2,没返回值,3,多个返回值

(1),一个返回值:就是我们刚刚第一次用return的那一串代码,就是一个返回值

(2),没返回值:就不用写return,那有人就有疑问了,那一定写return是不是就肯定有返回值,那我们上代码说答案

02_函数定义及使用函数02_函数定义及使用函数
1 def fucn():
2     print("没有返回值哈哈哈")
3     return 
4     print("真的没有哦")
5 ret = fucn()
6 print(ret)
写return没返回值

这几行代码,要说一下return下面的print()没有执行,这个是return的另一种用法,程序一旦遇到rreturn,就结束整个函数

(3)多个返回值:

02_函数定义及使用函数02_函数定义及使用函数
1 def re_l():
2     return 1,2,3,4
3 def re_c():
4     return 1,2,'c',['s','e']
5 demo = re_l()
6 print(demo)
7 demo_ret = re_c()
8 print(demo)
View Code

返回多个值会被组织成元组被返回,也可以用多个值来接收

02_函数定义及使用函数02_函数定义及使用函数
1 def fu():
2     return 1,2,3,4
3 # 多个值用一个变量来接收
4 ret1 = fu()
5 print()
6 
7 # 多个值,用多个变量来接收
8 a,c,v,b = fu()
9 print(fu())
View Code

为什么会这样那??,答:用逗号隔开,python会认为这是一个元组

02_函数定义及使用函数02_函数定义及使用函数
 1 # 事例1
 2 >>> a,b,c,d = [1,2,3,4]
 3 >>> a
 4 1
 5 >>> b
 6 2
 7 >>> c
 8 3
 9 >>> d
10 4
11 >>> 
12 
13 # 事例2
14 >>> a,_,c,_ = [1,2,3,4]
15 >>> a
16 1
17 >>> c
18 3
19 
20 # 事例3:也适用于字符串,列表,字典,集合
21 >>> a,b = {'name':'eva','age':18}
22 >>> a
23 'name'
24 >>> b
25 'age'
26 >>> 
多变量接收多值

 

 

函数中的参数

现在我们已经完成一个可以返回字符串长度的函数,假如(又来了哈哈哈),我们换一个字符串怎么办,这样的话我们的函数还是不完美

02_函数定义及使用函数02_函数定义及使用函数
1 # 定义函数
2 def fucn(s1):
3     '''计算s1的长度'''
4     length = 0
5     for i in s1:
6         length = length + 1
7     return length
8 ret = fucn('hello world')
9 print('ret %s'%ret)
带参数的函数

这个时候的函数fucn(s1),就是我们要告诉它要计算谁,这个过程就叫传递参数,简称传参,函数里的s1和hello world就是参数

我们经常听别人说实参和形参,这两个到底有什么区别??

实参和形参

其实最好理解的也很正确的就是我们传的“hello world”,被称为实际参数,因为这个实际的参数要交给函数的内容,简称实参

所谓s1就是一个形参,因为这个s1只是一个变量的名字,被称为形式参数,主要因为定义函数的时候它只是一个形式而已,简称形参

注意:参数可以传多个 ,用逗号隔开

02_函数定义及使用函数02_函数定义及使用函数
1 def func(x,y):
2     the_max = x if x > y else y
3     return the_max
4 ret = func(30,20)
5 print(ret)
传多个参数

 参数小班车马上出发,Are you ready?

 

 

位置传参

         1,按照位置传值

02_函数定义及使用函数02_函数定义及使用函数
1 def func(x,y):
2     # 此时x是100,y 是20
3     tme_ret = x if x > y else y
4     return tme_ret
5 ret = func(100,20)
6 print(ret)
View Code

         2,关键字传值

02_函数定义及使用函数02_函数定义及使用函数
1 def func(x,y):
2     tem_ret = x if x > y else y
3     return tem_ret
4 ret = func(x = 100,y = 200)
5 print(ret)
View Code

         3,合起来用 

02_函数定义及使用函数02_函数定义及使用函数
1 def fucn(x,y):
2     print(x,y)
3     tme_ret = x if x > y else y
4     return tme_ret
5 ret = fucn(10,y = 30)
6 print(ret)
View Code

       正确用法

    问题一:位置参数必须在关键字参数的前面

    问题二:对于一个形参只能赋值一次

注意:位置参数必须传值

def fucn(x,y):
      tme_ret = x if x > y else y
      return the_ret
ret = fucn()
print(ret)


# 报错:TypeError: fucn() missing 2 required positional arguments: 'x' and 'y'

 

默认参数的定义及使用:

02_函数定义及使用函数02_函数定义及使用函数
1 def stu(name,sex = 'wede'):
2     '''这里sex的默认参数是sex值是wede'''
3     print(name,sex)
4 
5 stu('xiaohui')
6 stu('xiaobai')
View Code

 

默认参数的陷阱

02_函数定义及使用函数02_函数定义及使用函数
1 def deul(a,l = []):
2     l.append(a)
3     print(l)
4 
5 deul('wede')
6 deul('xiaobai')
默认参数的陷阱

 

 

动态参数

  按位置传值多余的参数都由args统一接收,保存成一个元组的形式

02_函数定义及使用函数02_函数定义及使用函数
1 def mysum(*args):
2     the_sum = 0
3     for i in args:
4         the_sum+=i
5     return the_sum
6 
7 the_sum = mysum(1,2,3,4)
8 print(the_sum)
*args求和函数应用
02_函数定义及使用函数02_函数定义及使用函数
1 def stu(**kwargs):
2     print(kwargs)
3     print(kwargs['name'],kwargs['sex'])
4 stu(name = 'wede',sex = 'male')
**kwargs应用

 

 

 

初识函数小结:

定义函数:

 1.定义:def 关键词开头,空格之后接函数名称和圆括号()。

2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。
    参数可以定义多个,也可以不定义。
    参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。
    如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序 3.注释:函数的第一行语句应该添加注释。 4.函数体:函数内容以冒号起始,并且缩进。 5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None def 函数名(参数1,参数2,*args,默认参数,**kwargs): """注释:函数功能和参数说明""" 函数体 …… return 返回值

调用函数:
1.函数名()
    函数名后面+圆括号就是函数的调用。
2.参数:
    圆括号用来接收参数。
    若传入多个参数:
        应按先位置传值,再按关键字传值
        具体的传入顺序应按照函数定义的参数情况而定
3.返回值
    如果函数有返回值,还应该定义“变量”接收返回值
    如果返回值有多个,也可以用多个变量来接收,变量数应和返回值数目一致

无返回值的情况:
函数名()

有返回值的情况:
变量 = 函数名()

多个变量接收多返回值:
变量1,变量2,... = 函数名()

参数总结:

02_函数定义及使用函数