函数

1:为什么要用函数?

 代码冗余

可读性差

函数的定义:

定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。

   def 是固定的,不能变,必须是连续的def三个字母,不能分开。。。它们要相亲相爱的在一起。

   空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。

   函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能

   括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!

注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

调用:就是 函数名() 要记得加上括号,好么好么好么。

函数的返回值用return返回的。

def name():
    n=o
    for i in range(5):
        n+=1
     return(n)
my_name=name
print(my_name)

返回值会有很多种情况为NONE

你return的数值不对等等。

 

 

2.参数

分为:位置参数,默认参数,和动态参数。

位置参数:是指前面的形参,是按照下面的实参来变化的参数,下面的位置变化,会直接影响上面的变化例如:

def my_info(name,age)

        print(name,age)

my_info('panyu','18')
答案:是panyu,18


def my_info(name,age)
    print(name,age)

my_info(18,'panyu')
答案:18  panyu

 

默认参数:是指实参后面直接定义一个a=10或者别的b=20的参数,直接上面形参可以直接调用

1.def my_name(name,age):
           2.  print(name,age)   


3.my_name(name=20,age=10)
4.i=my_name 答案:
20 10

如果上面形参也定义了,name=10,还是会以实参为主,这里会涉及到一个程序运行的先后问题,

程序首先运行到def 函数时候会直接跳到实参那一行,调用实参的数据后,再从def函数开始运行,运行完成后会有一个值得返回,

这个值才是最终结果。参照:首先程序运行到1时,会直接跳过2,直接拿3中的数据,再返回1运行,再经过2,把值调出来,后面赋予i.

3,动态参数。

分为1,*args,2**kwargs.

1,*args 函数能把实参的数据,多余的会在最后添加一个元组,把剩余的全部添加进去。

def my_name(a,b,*args):
        print(a,b,args)

my_name(2,35,6,7,8)
答案:2 35 (6,7,8)

这个显示出来的就是用元组集合在一起。

2,**kwargs,是为了默认函数而创建的,当实参a=1 或者b=2时,就可以用**kwargs。

def my_name(a,b,**kwargs):
        print(a,b,kwargs)

my_name(2,35,c=1,d=2,e=3)
答案:2,35{'c':1,'d':2,'e':3}
可以看出用**kwargs的时候,就会形成一个字典,把默认参数的数据发送进去。

3,这里有一个先后的问题,如果一个程序里,既有默认函数,位置函数,还有动态函数('args,**kwargs),那他们的先后顺序是怎么样的。

def my_name(a,b,*args,**kwargs)
        print(a,b,args,kwargs)
myname(1,2,3,4,5,6,7,8,c=1,d=2,e=3)
答案:1 2 (3,4,5,6,7,8,) {'c':1,'d':2,'e':3}

他们的先后顺序是位置参数,*args,,默认参数,最后才是**kwargs...

 

posted @ 2017-07-25 17:22  forjie  阅读(141)  评论(0编辑  收藏  举报