zoukankan      html  css  js  c++  java
  • day9:函数

    1,上一小节复习,文件是不能修改的,但是我们可以先打开原来的文件,读取line的过程中,先replace,然后再修改。

    # 把文件中的每一行的Lisa换成Jack,因为Python中的文件是不能直接修改的,所以一般是先读,读的过程修改完写入一个新的文件,
    # 然后删除旧文件,写入新文件即可
    
    with open("file.txt","r",encoding="utf-8") as f1, open("file_bak.txt","w+",encoding="utf-8") as f2:
    
        for line in f1:  # 这儿不用read直接for line就可以
            if "lisa" in line:  # 这里的判断别忘了
                line = line.replace("lisa","Jack")  # 这儿不要忘了吧line赋值回去
                # li.append(line)
            f2.write(line)   # 打开后可以重复写的,清空只是open的那一瞬间会清空
    
    
    # 删除文件和重命名文件
    import os
    os.remove("file.txt")
    os.rename("file_bak.txt","file.txt")

    2,定义函数def,如果定义的函数名,系统内已经有了得话,那么会执行我们自己定义的函数,所以命令不要用系统的关键字

    3,函数的返回值return三种情况:没有返回值(不写return默认是None,但是我们一般不会写return None,我们会写return,结束一个函数的继续),返回一个值(可以返回任意的数据类型,只要返回就可以接收到,一个函数写多个return也是只执行其中一个),和返回多个值(可以用一个变量接收成一个元祖,也可以用多个变量接收,有多少个返回值就用多少个变量接收),return后面的函数就不在执行了,pass后面的代码还会执行。

    4,传递参数也叫传参,实参,实际参数

    def sum( *args ):
        print(*args)
        print(args)
    
    
    li=[1,2,3,4]
    sum(li)
    sum(*li) # 加上*代表打散,传参闭合,星号打散
    
    运行结果:
    [1, 2, 3, 4]
    ([1, 2, 3, 4],)
    1 2 3 4
    (1, 2, 3, 4)

    5,定义函数参数的顺序,与解释器约定好的,位置参数,*args,默认参数,**kwargs

    def func(a,b=2,c=9):
        print(a,b,c)
    
    # 传参参考变量命名
    func(1,3,5) # 默认参数可以按照关键字和和位置传
    func(a=3,b=9,c=0)
    运行结果:
    1 3 5
    3 9 0
    def func(a,b,*args,default=1,**kwargs):
        print(a,b,args,kwargs)
    
    func(1,2,default=1,c=3,l=9)
    运行结果:
    1 2 () {'c': 3, 'l': 9}

    6,动态参数有两种:*args,接收的是按照位置传参的值,组织成一个元祖,**kwargs,接收的是按照关键字传参的值,组织成一个字典

    def func(**kwargs):
        print(kwargs)
        print(*kwargs)   # 字典的key
        # print(**kwargs)  # 不可以继续拆分了,所以会报错
    
    # 传参参考变量命名
    func(a=1,b=2,_s="333")
    运行结果:
    {'a': 1, 'b': 2, '_s': '333'}
    a b _s

    7,args和kwargs其实也可以叫做其他的名字,不过我们约定俗称都叫做args和kwargs,args只可以接收位置参数,kwargs只可以接收关键字参数

    8,一个列表作为参数,站在实参的角度上,在一个列表前面加一个星号,就是把列表按照顺序打散。

    li = [1,2,3,4,5]
    def func(*args):
        print(args)
    
    func(li[0],li[1],li[2],li[3],li[4])  # 这样比较麻烦,有没有比较简单的方法,有,还记得我们讲的打散吗?
    func(*li)
    
    运算结果:
    (1, 2, 3, 4, 5)
    (1, 2, 3, 4, 5)

    9,字典作为参数

    dict1 = {"name":"lisa","age":22,"gender":"F"}
    def func(**kwargs):
        print(kwargs)
    
    func(**dict1)
    
    运行结果:
    {'name': 'lisa', 'age': 22, 'gender': 'F'}

    10,docstring 输入三个单引号或者三个双引号,加上函数的注释,函数的注释,单行,# 多行,三引号

    def func(**kwargs):
        '''
        
        这一行注释函数是干啥的
        :param kwargs:这儿写入参数的介绍
        :return:这里写上返回值是啥,干啥用的
        '''
        print(kwargs)
    
    func(**dict1)
    
    # 双下函数:
    print(func.__name__)
    print(func.__doc__)
    
    运行结果:
    {'name': 'lisa', 'age': 22, 'gender': 'F'}
    func
    
    
        这一行注释函数是干啥的
        :param kwargs:这儿写入参数的介绍
        :return:这里写上返回值是啥,干啥用的
        

    11,上一小节作业题,使用range倒叙打印出100到0

    for i in range(100,-1,-1):
        print(i)

    12,计算用户输入内容中索引为奇数,并且是数字的总的个数:

    s = input(">>>")
    count = 0
    for i in s:
        if s.index(i) % 2 ==1 and i.isdigit():
            count += 1
    
    print(count)
    运行结果:
    >>>1234hkjl6789
    4

    13,

    i =[11,22,33,44,55,77,88,90,56]
    # 大于66的保存在key1, 小于66的保存在key2
    
    # 第一种写法:
    result= {}
    result.setdefault("key1",[])
    # result["key1"] =[]
    # result["key2"] =[]
    result.setdefault("key2",[])
    for i in li:
    
        if i < 66:
            result["key1"].append(i)
        else:
            result["key2"].append(i)
    
    print(result)
    
    
    
    # 第二种写法:
    for i in li:
        if i > 66:
            if "key1" not in result:
                # result.setdefault("key1")
                result["key1"] = []
            result['key1'].append(i)
        else:
            if "key2" not in result:
                # result.setdefault("key1")
                result["key2"] = []
            result['key2'].append(i)
    
    print(result)
    
    运行结果:
    {'key2': [11, 22, 33, 44, 55, 56], 'key1': [77, 88, 90]}

    14,录入用户名,密码,遇到敏感字符用同等数量的*替换

    user_list = [
        {"username":"lisa","password":123},
        {"username":"jack","password":456}
    ] # python 对格式要求严格,不这样写的话,会无效的
    
    invalid_name = ["jerk","idiot","stupid"]
    passwd = ''
    while 1:
        usrname = input(">>>")
        if usrname.upper() == "Q": break
        else:
            if usrname in invalid_name:
                # for i in usrname:
                #     usrname = usrname.replace(i,"*")  # 这儿不要忘了再赋值回去
                usrname = usrname.replace(usrname,"*"*len(usrname))  #一样的效果
            passwd = input("passwd")  # 这儿注意不管上面替换不替换都要加入list
    
        user_list.append({"username":usrname,"password":passwd})
    
    print(user_list)
  • 相关阅读:
    javascript通用函数库
    Nginx的负载均衡的那点事
    四种多服务器共享session的方法
    Nginx 配置文件nginx.conf的完整配置说明<转>
    Struts2标签问题-using Struts tags without the associat
    转:ibatis的cacheModel
    大型互联网网站架构心得之一
    nginx的upstream(解决session问题)
    rails3项目解析之1——系统架构
    使用 Nginx 提升网站访问速度
  • 原文地址:https://www.cnblogs.com/lisa-blog/p/10056679.html
Copyright © 2011-2022 走看看