Python学习笔记(四)——自定义函数、多值参数、缺省参数、函数递归、元组和字典的拆包

1 函数

  • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

  • 函数能提高应用的模块性,和代码的重复利用率。
    定义一个函数的格式:

      def 函数名(): 
      	  函数体
    
  • ()中用于存放传入的参数,

  • 函数内容以冒号起始,并且缩进

  • 要想使用函数 ,必须调用函数

      函数名()
    

2 函数的命名规范

函数名称应该符合标识符的命名规则:

  • 可以由字母下划线和数字组成。
  • 不能以数字开头
  • 不能与关键字重名

3 函数的文档注释及函数调试:

  • 函数的文档注释:

    应该在定义函数的下方,使用连续的三对引号,编写对函数的说明文字。
    在函数调用的位置,使用快捷键Ctrl+Q,可以查看函数的说明信息。
    如在定义函数的上方进行注释,则需要和其他代码(或注释)保留两个空行。

  • 函数的调试:
    F8 Step Over可以单步执行代码,会把函数调用看作一行代码直接执行
    F7 Step into可以单步执行代码,如果是函数,会进入函数内部。

4 函数的参数及作用

当有多个参数时,使用逗号隔开
def sum_2_num(num1,num2):
'''两个整数的求和'''
	result = num1 + num2
	print("%d + %d = %d"%(num1,num2,result))
sum_2_num(2,30)

作用:
函数的参数的可以增加函数的通用性,针对相同的数据处理逻辑,能够适应更多的数据。

  1. 在函数内部,把参数当做变量使用,进行需要的数据处理
  2. 函数调用时,按照函数定义的参数顺序,把希望在函数内部处理的数据,通过
    参数传递。

5 形参和实参

  • 形参(变量):定义函数时,小括号中的参数,是用来接收实参的,在函数内部作为变量使用

  • 实参(实实在在的数据):调用函数时,小括号中的参数,是用来把数据传递到函数内部用的。

      定义一个函数能够打印任意重复次数的分割线
      def print_line(char,time):   #形参
          print(char * time)
      
      print_line("*",40)   ### 实参
    

6 函数的返回值:

有时会希望一个函数执行结束后,最后给调用者一个结果,以便调用者针对具体的结果做后续的处理。
使用return关键字可以返回结果。而调用函数一方可以使用变量来接收函数的返回值。
注意:
return 表示返回,其后续的代码都不会被执行。

def sum_2_num(num1,num2):
	'''两个整数的求和'''
	result = num1 + num2
	return  result

num_result = sum_2_num(2,30)
print(num_result)
当返回值有多个时,可以使用元组

将多个数据存储在元组中。
例如:return one,two
一般情况下需要添加括号
示例:

def test_1():
	print("测量温度")
	temp = 12
	print("测量湿度")
	wetness = 20
 return temp,wetness

result = test_1()  # 返回的是一个元组
print(result)

'''当函数返回元组,希望能够单独的处理元组中的元素
可以使用多个变量一次性接收函数的返回值,
**注意**:使用多个变量接收结果时,变量的个数应该和元组中
元素的个数保持一致。'''
gl_temp,gl_wetness = result
print(gl_temp)
print(gl_wetness)

7 函数的嵌套调用

在一个函数中调用另一个函数。

def test1():
    print("#" * 10)
def test2():
    print("-" * 10)
    test1()
    print("-" * 10)

test2()

结果为:
----------
##########
----------

打印五行分割线

def print_line(char,time):
    print(char * time)

def print_lines():
    i = 0
    while i<5:
        print_line("*",40)
        i += 1
        
print_lines()

升级版

def print_line(char,time):

    print(char * time)

def print_lines(char,time):
    i = 0
    while i<5:
        print_line(char,time)
        i += 1
print_lines("-",20)

8 思考

定义函数时,是否接收参数,或者是否返回结果????

  • 如果函数内部处理的数据不确定,就可以将外界的数据以参数传递到函数内部。
  • 如果希望一个函数执行完成后,向外界汇报执行结果,就可以增加函数的返回值。

9 缺省参数

  • 定义函数时,可以给某个参数指定一个默认值,具有默认值的参数叫做缺省参数。

  • 调用函数时,如果没有传入缺省参数的值,则在函数内部使用定义函数时指定的参数默认值

      num_list = [2,6,1]
      num_list.sort()
      num_list.sort(reverse=True) #相当于是一个缺省值
    

缺省参数的注意事项

  1. 设置缺省值gender = True,一般使用最常见的值作为默认值。而且必须保证带有默认值的缺省参数在参数列表末尾。

     def print_info(name,gender = True):
     """
     :param name: 姓名
     :param gender: True是男生,False是女生
     """
     gender_text = "男生"
     if not gender:
         gender_text = "女生"
     print("%s 是 %s "%(name,gender_text))
     print_info("小明") #默认是男生
     print_info("小红",False) #
     
     结果:
     小明 是 男生 
     小红 是 女生 
    
  2. 调用带有多个缺省参数的函数。
    在调用函数时,如果有多个缺省参数,需要制定参数名。这样解释器才能够知道参数的对应关系。

10 多值参数

有种方式:	
1.参数名前增加一个 * ,可以接收元组
2.参数名前增加两个*,可以接收字典。

一般在给多值参数命名时,习惯使用一下两个名字:

*args---存放元组参数,
**kwargs--存放字典参数,

示例:

def demo1(num,*args,**kwargs):
    print(num)
    print(args)
    print(kwargs)

demo1(1,2,3,4,5,name = "小曾")

结果:
1
(2, 3, 4, 5)
{'name': '小曾'}

牛刀小试:计算任意多个数字的和。将传递的所有数字累加并且返回结果。

def sum_numbers(*args):
    '''求元组中元素的和'''
    num = 0
    print(args)
    for n in args:
        num += n
    return num
result = sum_numbers(1,2,3,4,5,6)
print(result)

11 元组和字典的拆包:

在调用带有多值参数的函数时,如果希望:

  • 将一个元组变量,直接传递给args.
  • 将一个字典变量,直接传递给kwargs

使用拆包,可以简化参数的传递。拆包方式:

  • 在元组变量前,增加一个 *
  • 在字典变量前,增加两个*

示例:

def demo2(*args,**kwargs):
    print(args)
    print(kwargs)

gl_nums = (1,2,3,4,5)
gl_dict = {"name":"小曾","age":20}
demo2(*gl_nums,**gl_dict)
demo2(1,2,3,name="小明",age=20)#直接赋值。

结果:
(1, 2, 3, 4, 5)
{'name': '小曾', 'age': 20}

12 函数的递归:

就是函数自己调用自己。函数内部的代码是相同的,只是针对参数不同,处理的结果不同。当参数满足一个条件时,函数不再执行。
示例:求1到100的累加和

### 数字累加  相当于 num + (1+num-1)
def sum_numbers(num):
    '''计算1+2+3。。。num的结果'''
    #print(num)
    #递归的出口,当参数满足某个条件时,不再执行函数。
    if num == 1:
        return 1
    temp = sum_numbers(num - 1)
    return num + temp
result = sum_numbers(100)
print(result)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章