python,函数的基本用法

一.函数

函数的概念:对功能或者动作的封装可以帮我们把一段公共的代码提取出来

语法如下

def 函数名(形参):
	函数体
函数名(实参)

# 函数名()
def yue():
    print("1. 打开手机")
    print("2. 打开陌陌")
    print("3. 找个漂亮的小姐姐")
    print("4. 探讨一下人生")
    print("5. 一起出来happy")

yue() # 执行一次函数
print("休息休息")
yue() # 再来一次
print(yue)

二.函数的返回值
return, 终止函数的运行
1. 函数内部不写return, 默认在最后返回None
2. 函数只写了return 返回None
3. return 值 有一个返回值
4. return 值1, 值2, 值3 .... 有多个返回值
返回值返回给调用方

例一
def yue():
    print("1. 打开手机")
    print("2. 打开陌陌")
    print("3. 找个漂亮的小姐姐")
    print("4. 探讨一下人生")
    print("5. 一起出来happy")
ret = yue()
print(ret)
例二
def yue():
    print("1. 打开手机")
    print("2. 打开陌陌")
    return
    print("3. 找个漂亮的小姐姐")
    print("4. 探讨一下人生")
    print("5. 一起出来happy")
例三
def yue():
    print("1. 打开手机")
    print("2. 打开陌陌")
    print("3. 找个漂亮的小姐姐")
    print("4. 探讨一下人生")
    print("5. 一起出来happy")
    return "漂亮的小姐姐"  # 返回到哪儿了????  谁调用的就返回给谁
例四
def yue():
    print("1. 打开手机")
    print("2. 打开微信")
    print("3. 找个漂亮的小姐姐")
    print("4. 探讨一下人生")
    print("5. 一起出来happy")
    return "漂亮的小姐姐","大妈", "大爷", "鲜肉"  # 返回到哪儿了????  谁调用的就返回给谁
ret = yue() # ('漂亮的小姐姐', '大妈', '大爷', '鲜肉')
print(ret)

三.函数的参数(一部分)
形参: 在函数声明位置的变量
1. 位置参数2. 默认值参数

def regist(id, name, age, gender="男"): # 从语法上讲. 不允许, 从代码运行也不允许
    print(id, name, age, gender)
regist(3, "王大锤", 20)
regist(4, "李鸿洁", 18, "女")

3. 混合参数  位置参数, 默认值参数
4. 动态传参, *args, **kwargs
实参: 在函数调用的时候给函数传递的具体的值
1. 位置参数

def chi(good_food, junk_food,drink, sweet, xiaoshi, lingshi1, lingshi2, lingshi3, good_food2, xiaoye, shuiguo):
    print(good_food, junk_food, drink, sweet)
chi("猪蹄", "北冰洋", "哈根达斯", "薯条", "罐头", "大米饭")

def chi(good_food, junk_food,drink, sweet):
    print(good_food, junk_food, drink, sweet)

chi("大米饭", "猪蹄", "北冰洋", "哈根达斯")

2. 关键字参数

def chi(good_food, junk_food,drink, sweet):
    print(good_food, junk_food, drink, sweet)
# 关键字参数: 必须按照形参的名字来传递信息
chi(good_food="大米饭", sweet="哈根达斯", drink="饮料", junk_food="薯条")

3. 混合参数

def chi(good_food, junk_food, drink, sweet):
    print(good_food, junk_food, drink, sweet)
chi("大米饭", "薯条", sweet="哈根达斯", drink="北冰洋") # positional argument follows keyword argument 

顺序: 位置, 关键字
传参: 把实参赋值给形参的过程

四.函数的应用

1.注册
def regist():
    f = open("account", mode="r+", encoding="utf-8")
    while 1:
        # 输入用户名和密码
        username = input("请输入你的用户名:")
        password = input("请输入密码:")

        for line in f:
            if line.strip().split(":")[0] == username:
                print("对不起, 该用户已经注册!")
                break
        else:
            print("恭喜, 注册成功")
            f.write("\n"+username+":"+password)
            # break #  能执行到这个break. for一定是执行完了的.
            f.flush()
            f.close()
            return  # 直接结束函数的调用
regist()

2.登录
def login():
    username = input("请输入用户名:") # sylar:123
    password = input("请输入密码:") # 123
    f = open("account", encoding="utf-8")
    for line in f:
        if line.strip() == username + ":" + password:
            print("恭喜你.登录成功 ")
            return True # True, 登录成功

    else:
        print("对不起, 用户名或密码错误")
        return False # False 登录失败
login()
login()
login()
login()

练习六..作业

1.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def func(lst):
    return lst[1::2]
print(func(['王大锤','刘亦菲','曾小贤','王祖贤','张柏芝','陈小春']))
2.写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def func(lst):
    return len(lst)>5
print(func([1,2,2]))
3.写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者。
def func(lst):
    if len(lst)>2:
        return lst[:2]
print(func([1,2]))
4.写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其他内容的个数,并返回结果。
def func(s):
    shuzi = 0
    zimu = 0
    kongge = 0
    qita = 0
    for c in s:
        if c.isdigit():
            shuzi+=1
        elif c.isalpha():
            zimu+=1
        elif c== "  ":
            kongge+=1
        else:
            qita += 1
    print(shuzi,zimu,kongge,qita)
    return shuzi,zimu,kongge,qita
func("hidjhdsfhfhsdsd2323453478%R$%$%$%+--==-g-//..,l")
5.写函数,接收两个数字参数,返回比较大的那个数字。
方案一
def func(a, b):
    if a > b:
        return a
    else:
        return b
方案二
def func(a, b):
     return a if a > b else b   # a>b? a:b

6.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
def func(dic):
    dd = {}
    for k, v in dic.items():
        if len(v) > 2:
            v = v[:2]
        dd[k] = v
    return dd

dic = {"k1": "v1v1", "k2": [11,22,33,44]}
print(func(dic))
7.写函数,此函数只接收一个参数且此参数必须是列表数据类型, 此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。
def func(lst):
    dic = {}
    for i in range(len(lst)): # 索引  0 1 2
        dic[i] = lst[i]
    return dic

print(func([11,22,33]))
8.写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。 用户通过输入这四个内容,然后将这四个内容传入到函数中, 此函数接收到这四个内容,将内容追加到一个student_msg文件中。 
def func(name,edu, age, gender="男"):
    f = open("student_msg", mode="a", encoding="utf-8")
    f.write(name+"$$"+gender+"$$"+edu+"$$"+age+"\n")
    f.flush()
    f.close()
9.题升级:支持用户持续输入,Q或者q退出,性别默认为男, 如果遇到女学生,则把性别输入女
while 1:
    content = input("请输入姓名,年龄,学历,性别(周杰伦,18,小本,)(q退出)")
    if content.upper() == "Q":
        break
    lst = content.split(",")

    if len(lst) <= 3 or lst[3] == '':
        func(lst[0], lst[2], lst[1])
    else:
        func(lst[0], lst[2], lst[1], lst[3] )
def func(s="男"):
    print(s)
func()
10.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成文件的修改操作(升级题)。
def func(file_path, old, new):
    with open(file_path, mode="r", encoding="utf-8") as f1, \
         open(file_path + "_副本", mode="w", encoding="utf-8") as f2:
        for line in f1:
            s = line.replace(old, new)
            f2.write(s)
    os.remove(file_path)
    os.rename(file_path+"_副本", file_path)

func("student_msg", "$$", "@@")

  

  

猜你喜欢

转载自www.cnblogs.com/liucsxiaoxiaobai/p/9891331.html