day009 认识函数(一)

一、函数

  个人认为是为了实现某个功能的一段代码。python中函数分内置函数和自定义函数

1 # len()
2 s = '金老板小护士'
3 len(s)
内置函数
 1 # 自定义函数 my_len()
 2 
 3 def my_len():  
 4     i = 0
 5     for k in s:
 6         i += 1
 7     print(i)
 8 
 9 length = my_len()
10 print(length)
自定义函数

二、函数的组成

 1 #  自定义函数 my_len()
 2 
 3 def my_len():  # def 定义符  my_len(参数)  函数名
 4     # 函数体
 5     i = 0
 6     for k in s:
 7         i += 1
 8     return i  # 返回值
 9 
10 length = my_len() # 调用函数
11 
12 print(length)
函数组成

(一)返回值 return

  返回值的3种情况

    没有返回值 —— 返回None
        不写return
        只写return:结束一个函数的继续
        return None —— 不常用
    返回1个值
        可以返回任何数据类型
        只要返回就可以接收到
        如果在一个程序中有多个return,那么只执行第一个
    返回多个值
        用多个变量接收:有多少返回值就用多少变量接收
        用一个变量接收: 得到的是一个元组

(二)参数

    形参:(定义函数的时候 )
        位置参数 : 必须传。
        *args :可以接收任意多个位置参数。  接收的是按照位置传参的值,组织成一个元组
        默认参数 : 可以不传。参数名 = '默认的值'
        **kwargs : 可以接收多个关键字参数。接受的是按照关键字传参的值,组织成一个字典
    实参:按照位置传参,按照关键字传参(调用函数的时候,占用内存地址)

    顺序:位置参数,*args,默认参数,**kwargs

三、作业

  1、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

1 def func(l):
2     new = l[1::2]
3     return new
4 
5 print([1, 2, 3, 4, 5, 6])
answer

  2、写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。

1 def func(s):
2     if len(s) > 5:
3         return 1
4     else:
5         return 0
6 
7 
8 print("abcd")
answer

  3、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

1 def func(l):
2     if len(l) > 2:
3         rerutn l[0:2]
4 
5 
6 print(func([1,2,3,4]))
answer

  4、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。

 1 def func(s):
 2     dic = {"num": 0, "alpha": 0, "space": 0, "others":0}
 3     for i in s:
 4         if i.isdigit():
 5             dic["num"] += 1
 6         elif i.isalpha():
 7             dic["alpha"] += 1
 8         elif i.isspace():
 9             dic["space"] += 1
10         else:
11             dic["others"] += 1
12     
13     return dic
14 
15 print(func("+0-0sk ahe817ja shf wet1"))
answer

  5、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。

 1 def func(x):
 2     if type(x) is str and x:  #参数是字符串
 3         for i in x:
 4             if i == ' ':
 5                 return True
 6     elif x and type(x) is list or type(x) is tuple: #参数是列表或者元组
 7         for i in x:
 8             if not i:
 9                 return True
10     elif not x:
11         return True
12 
13 print(func([]))
answer

  6、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

    dic = {"k1": "v1v1", "k2": [11,22,33,44]}

    PS:字典中的value只能是字符串或列表

1 def func(d):
2     for k in d:
3         if len(d[k]) > 2:
4             d[k] = d[k][0:2]
5     return d
6 
7 
8 dic = {"k1": "v1v1", "k2": [11,22,33,44]}
answer

  7、写函数,接收两个数字参数,返回比较大的那个数字。

1 def my_max(a, b):
2     return a if a > b else b
3 
4 
5 
6 print(my_max(1, 5))
answer

   8、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)

 1 def func(filename,old,new):
 2     with open(filename, encoding='utf-8') as f, open('%s.bak'%filename, 'w', encoding='utf-8') as f2:
 3         for line in f:
 4             if old in line:  # 班主任:星儿
 5                 line = line.replace(old,new)
 6             # 写文件
 7             f2.write(line)  # 小护士:金老板
 8 
 9     import os
10     os.remove(filename)  # 删除文件
11     os.rename('%s.bak'%filename, filename)  # 重命名文件
answer

 

posted @ 2018-10-09 11:18  wangspy  阅读(64)  评论(0)    收藏  举报