20200505-函数初识

为什么要用函数:减少代码冗余,增加代码可读性

函数的定义与调用:

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

mylen()
定义实例

  总结一:

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

     def 是固定的,不能变,必须是连续的def三个字母,不可分开。

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

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

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

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

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

函数入参:

  形参:函数定义时,参数为形参

  实参:函数调用时,参数为实参

  1.传递多个参数:

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

print(ma)
传递多个参数

  2.传参

    必填传参

#!/usr/bin/python3
 
#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print (str)
   return
 
# 调用 printme 函数,不加参数会报错
printme()
必填参数

    按关键字传参

#!/usr/bin/python3
 
#可写函数说明
def printinfo( name, age ):
   "打印任何传入的字符串"
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printinfo函数
printinfo( age=50, name="runoob" )
关键字传参

    默认传参:调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:

#!/usr/bin/python3
 
#可写函数说明
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printinfo函数
printinfo( age=50, name="runoob" )
print ("------------------------")
printinfo( name="runoob" )
默认传参

    不定长传参:函数能处理比当初声明时更多的参数。这些参数叫做不定长参数

      1.加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数;如果函数调用是没有指定参数,默认为空元组

#!/usr/bin/python3
  
# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vartuple)
 
# 调用printinfo 函数
printinfo( 70, 60, 50 )
以单*形式的不定长传参

      2.加了两个星号 ** 的参数会以字典的形式导入,默认为空字典

#!/usr/bin/python3
  
# 可写函数说明
def printinfo( arg1, **vardict ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vardict)
 
# 调用printinfo 函数
printinfo(1, a=2,b=3)
以双*形式的不定长传参

 

函数出参:

  return关键字:retrun和返回值之间要有空格,可以返回任意数据类型的值

  函数不使用return,默认返回一个none

  函数返回值只写return,后面不写其他内容,也会返回none;相当于写:return  none

def ret_demo():
    print(111)
    return
    print(222)
    #return
    #return  none
ret = ret_demo()

print(ret)
返回none值

  函数返回一个值:

#函数定义
def mylen():
    """计算s1的长度"""
    s1 = "hello world"
    length = 0
    for i in s1:
        length = length+1
    return length
#函数调用

str_len = mylen()

print('str_len : %s'%str_len)
函数返回一个值

  函数返回多个值:

    1.返回多个值,一个值来接收,返回的值会被当成元组进行接收

def ret_demo1():
    '''返回多个值''' 
    return 1,2,3,4
def ret_demo2():

'''返回多个任意类型的值'''

return 1,['a','b'],3,4


ret1 = ret_demo1()

print(ret1)

ret2 = ret_demo2()

print(ret2)
返回多个值,一个值来接收

    2.返回多个值,多个值来接收,返回几个值,就要用几个变量接收

def ret_demo2():
    return 1,['a','b'],3,4
#返回多个值,用一个变量接收

ret2 = ret_demo2()

print(ret2)

#用多个值接收返回值:返回几个值,就用几个变量接收

a,b,c,d = ret_demo2()

print(a,b,c,d)
返回多个值,多个值来接收

 

匿名函数:不再使用 def 语句这样标准的形式定义一个函数

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率

  定义:lambda [arg1 [,arg2,.....argn]]:expression

#!/usr/bin/python3
 
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
 
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))
示例

 

 

 

posted @ 2020-05-05 17:51  DCSun  阅读(122)  评论(0)    收藏  举报