首页 > 其他 > 详细

初识函数

时间:2019-07-09 19:38:10      阅读:101      评论:0      收藏:0      [点我收藏+]

1.函数简介

  1)函数是先定义后使用!!!!!!!

  def   funce(arg1,arg2.....):

  """描述信息"""

  函数体

  return value

  我们为什么要用参数呢?在以后的编程过程当中,有大量的代码会重复被使用,使用函数会解决代码重复问题,能统一维护,程序的组织结构清晰,可读性强。

  def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个‘:’,def 是固定的,必须是连续的def三个字母,空格是为了将def关键字和函数名分隔开,函数名只能包含字符串,下划线和数字且不能以数字开头。

  2)定义函数可以分为三类:

  无参函数、有参函数、空函数

2.reture关键字的作用

  返回值有三种情况:没有返回值,返回值,返回多个值。

  不写return:函数默认返回None.

def func():
     print(‘hahaha‘)
 res = func()
 print(res)

  只写return:return除了返回值之外,还可以直接结束整个函数的运行,返回值也是None

def func():
     l = [‘jason‘,‘egon‘,‘tank‘]
     while True:
         for i in l:
             if i == ‘egon‘:  # 当i为egon的时候 直接结束函数运行
                 # break
                 return
                 # print(‘asdasdkljlsjadl‘)  # 这一行代码拥有都不会运行
             print(i)
 res = func()
 print(res)

  写return none 跟上面的情况是一样的

  写return返回一个值:这个值可以是python任意数据类型

def func():
     return ‘123‘
 def func1():
     return [1,2,3]
 def func2():
     return {‘name‘:‘jason‘}
 def func3():
     return (1,)
 def func4():
     return {1,2,3,4,5}
 def func5():
     return True
 print(func(),func1(),func2(),func3(),func4(),func5())

    写return返回值:return会自动将多个值以元组的形式返回给调用者 

def func():
    return 1,2,3,4      # 返回的是(1,2,3,4)
res = func()
print(res)



def func1():
    return ‘a‘,‘b‘,‘c‘     #返回值为(‘a‘,‘b‘,‘c‘)
res = func1()
print(res)



def func2():
    return [1,2,3],[1,2,3],[1,2,3]        #返回值为([1,2,3],[1,2,3],[1,2,3])
res = func2()
print(res)



字典也是同上面输出一样

  返回多个值,并且不想让return帮你做处理,可以自己动手加上想要的类型

def func4():
    return [[1,2,3],[1,2,3],[1,2,3]]#返回值为[[1, 2, 3], [1, 2, 3], [1, 2,3]]
res = func4()
print(res)

  所有的函数都有返回值,无论写不写return ,python中所有的函数都有返回值,不写的情况下默认返回none。光写return和return none 并不是为了考虑返回值,而是为了结束函数的运行。

3.函数参数两大类型

  形参:在函数的定义阶段,括号内写的是变量名,是该函数的形式参数。

  实参:在函数的调用阶段,括号内实际传入的值,叫做实际参数

  形参就相当于变量名,而实参就相当于变量的值,函数调用传参的过程就是给形参变量名赋值的过程,形参和实参的绑定关系只在函数的调用阶段有效,函数运行结束关系自动解除,只在函数内部有效,函数外部无任何影响。

4.位置参数

  在函数定义阶段按照位置从左往右依次书写的变量名,叫做函数位置形参,位置参数在调用的时候,必须为其传值。

def my_max(x,y):
    print(x,y)
    if x > y:
        return x
    else:
        return y
res = my_max(1)  # 在调用函数的时候 少一个实参不行
res = my_max(1,2,3)  # 在调用函数的时候 多一个实参也不行
res = my_max(20,10)

  位置实参:在函数的调用阶段,传入的参数会按照位置一一对应给形参

  第一种直接按照位置传,一一对应。

  第二种指名道姓的传,关键字传字。

my_max(y=20,x=10)
my_max(10,y=20)  # 位置和关键字混合使用
my_max(20,y=40)

  在函数的调用阶段,位置参数和关键字参数可以混合使用,但是必须注意的是位置参数必须在关键字参数的前面(越短的越靠前,越长的越靠后),同一个形参不能被多次使用。

5.默认值参数

  在函数的定义阶段,形参(变量名),就已经被赋值了,在调用的时候可以不为默认值形参传值,默认使用定义阶段就已经绑定的值,在调用的时候如果可以给默认值形参传值,传了那么就使用你传的值,在定义阶段,默认值形参必须放在位置形参的后面。

  函数无论在什么地方被调用,都会跑到函数定义阶段去执行代码,形参中用到的值都是往函数定义阶段代码网上找。

6.可变长参数

  站在调用函数传递实参的角度,实参的个数不固定的情况,也就意味着形参也不固定,站在形参的角度,可以用*和**来接收多余的位置参数和关键字参数。

  站在形参的角度看*

  形参中的*会将多余位置实参统一用元组的形式处理,传递给*后面的形参名

def func(x,y,*z):
     print(x,y,z)  # z = (3, 4, 5, 6, 7, 8, 54, 43, 4, 5, 6, 6, 7, 8)
func(1,2,3,4,5,6,7,8,54,43,4,5,6,6,7,8,)

  站在实参角度看*

def func(x,y,z):
     print(x,y,z)
 func(a,b,c)
 func(*[1,2,3,4,5,6])  # *会将列表打散成位置实参一一传入等价于func(1,2,3,4,5,6)

  站在形参的角度看**

def func(x,y,**z):
    print(x,y,z)  # z = {‘z‘: 1, ‘a‘: 1, ‘b‘: 2, ‘c‘: 3}
func(x=1,y=2,z=1,a=1,b=2,c=3)

  **会接收所有多余的关键字参数,并将关键字参数转换变成字典的形式,字典的key就是关键字的名字。字典的value就是关键字的名字指向的值,将字典交给**后面的变量名

  站在实参的角度看**

def func(x,y,z):
    print(x,y,z)
func(12,3,4)
func(x=1,y=2,z=3)
d = {‘x‘:1,‘y‘:1,‘z‘,333}
func(**d) # 等价于func(1,1,333)

 ***会将字典拆成key = value的形式。

总结*与**

  *在形参中能够接受多余的位置参数,组织成一个元组赋值给*后面的变量名 

  **在形参中能够接受多余的关键字参数,组织成一个字典赋值给**后面的变量名

  *在实参中*能够将列表,元祖,集合,字符串打散成位置参数的形式传递给函数(看成for循环取值)

  **在实参中,能将字典打散成key = value 的形式,按照关键字参数传递给函数

  

  

初识函数

原文:https://www.cnblogs.com/panshao51km-cn/p/11159647.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!