python之路 初始函数

python之初识函数:

(一)为什么要使用函数:

   首先举一个例子,假如我们现在要计算"hello world"这个字符串的长度,我们可以怎么计算1,直接print(len(hello world)) 就可以计算长度,那么现在

    用len()这个函数了,我们还可以怎么计算呢,看下面代码

   

#利用for 循环计算字符串长度
  
 s = "hello world"
length = 0
for i in s:
    length += 1
print(length)

这样我们也可以计算出“hello world” 的长度,但是我们如果要计算多个字符串的长度呢,难道要写很多个这样的for循环吗?能不有一个有一个工具可以帮我们解决这个问题,拿出来就可以直接用,那么这个工具就叫做函数,可以很好的解决我们重复代码----->代码冗余的问题。

(二)函数的定义与调用

还是上面那个例子,我们怎样来实现呢

def mylen():
    s = "hello world"
    length = 0
    for i in s:
        length += 1
    print(length)

这样子就定义好了一个函数,和之间的代码好像没有什么区别,除了加了一个def 和缩进,执行上面代码,什么结果也没有。上面那个过程就相当于我们只是把工具做好了,但是我们要用是不是还得取出来,再来一段代码

#函数的定义
def mylen():
    '''
    计算长度的函数
    
    '''
    s = "hello world"
    length = 0
    for i in s:
        length += 1
    print(length)

#函数的引用
mylen()

总结:
      1,函数是以def关键字开头,空格之后接函数名和小括号():   函数名和定义变量差不多,必须是字母,下划线或数字组成,不能以数字开头。此外函数名还要有一定的意义,可以简单说明函数的功能。括号()和冒号:是必须加上的,2,注释:  每一个函数都应该对函数的功能和参数进行相应的说明,以增加函数的可读性,写在函数下面第一行,用三引号引起来。3,函数的调用,函数名加()就可以了。

(三)函数的返回值

要计算函数的返回值我们得用一个变量来接受str_len=len("hello world"),那么函数中是怎么实现的呢

def mylen():
    '''
    计算长度的函数
    :return:
    '''
    s = "hello world"
    length = 0
    for i in s:
        length += 1
    print(length)
    
str_len = mylen()
print(str—len) 

但是执行上述代码,发现返回为None,说明函数没有给你返回值。那么如何得到返回值呢。只需要加上return

def mylen():
    '''
    计算长度的函数
    :return:
    '''
    s = "hello world"
    length = 0
    for i in s:
        length += 1
    return length
    
str_len = mylen()
print(str—len) 

return 关键字的作用  1,返回函数的值  2,结束函数

返回值分两种情况:1,没有返回值

                                2,有返回值       当返回值为一个值得时候,用一个变量接收

                                                           当返回值为多个变量的时候,可以用一个变量接收(返回以元祖形式呈现),有几个值就用几个变量接收。

(四)函数的参数

函数的参数分为实参和形参,形参是在函数定义的时候接收的,形参是在函数调用时传入的。形参分为位置参数,*args,默认参数,**kwargs四种参数,形参分为按照位置传参,按照关键字传参,动态传参(直接传元祖或字典) 

def mylen(s):#s形参
    '''
    计算长度的函数
    参数s:要计算的字符串长度        #注释,说明函数和参数功能说明
    return:要计算的字符串
    :param s:
    :return:
    '''
    length = 0
    for i in s:
        length +=1
    return (length)
ret = mylen("hello world")#hello world为实参
ret2 = mylen("12345")
ret3 = mylen("egon is somebody")
ret4 = mylen("hahahhahhahahha")
print(ret)
print(ret2)
print(ret3)
print(ret4)

位置参数
         站在实参角度

1,按位置传参

 

def mymax(x,y):
    #此时x=10,y=20
    the_max = x if x > y else y
    return the_max

ma = mymax(10,20)
print(ma)

按照位置传参

2,按照关键字传参

def mymax(x,y):
    #此时x = 20,y = 10
    print(x,y)
    the_max = x if x > y else y
    return the_max

ma = mymax(y = 10,x = 20)
print(ma)

按照关键字传参

3,位置,关键字参数混合

def mymax(x,y):
    #此时x = 10,y = 20
    print(x,y)
    the_max = x if x > y else y
    return the_max

ma = mymax(10,y = 20)
print(ma)

位置、关键字混用传参

4,动态传参

def fun(**kwargs):
    print(kwargs)
d = {"a": 10,"b":20}
fun(**d)#返回为{'a': 10, 'b': 20}



#动态传参

站在形参角度
        位置参数必须传值

 

def mymax(x,y):
    #此时x = 10,y = 20
    print(x,y)
    the_max = x if x > y else y
    return the_max

#调用mymax不传递参数
ma = mymax()
print(ma)

#结果
TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'

位置参数必须传参

默认参数:将变化小的参数设置为默认参数

 

def stu_info(name,sex = "male"):
    """打印学生信息函数,由于班中大部分学生都是男生,
        所以设置默认参数sex的默认值为'male'
    """
    print(name,sex)


stu_info('alex')
stu_info('eva','female')

默认参数

动态参数:

*args接收按位置传参多余的参数,将他们组合成元祖输出**kwargs接收多个关键字传参,并将他们组成字典输出

 

def fun(a,*args,x = 10,**kwargs):
    print(a,args,x,kwargs)
fun(1,2,3,4,5,6,x= 20,y =30,z = 50)
#返回值为1 (2, 3, 4, 5, 6) 20 {'y': 30, 'z': 50}
1对应a,(2,3,4,5,6,)对应args,20对应x, {'y': 30, 'z': 50}对应kwargs

小结:函数主要解决面向编程过程中的代码冗余,以及可读性差的问题

函数定义的规则:

 

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

def 函数名(参数1,参数2,*args,默认参数,**kwargs):
        """注释:函数功能和参数说明"""
        函数体
        ……
        return 返回值
View Code

 

调用函数的规则:

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

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

            

 

 

 

 

 

 

 

 

 

 

 

posted on 2017-07-25 19:42  keepDoing  阅读(258)  评论(0编辑  收藏  举报

导航