zoukankan      html  css  js  c++  java
  • 第三章 Python函数

    函数

      如果在开发程序时,需要某块代码多次,但是为了提⾼编写的效率以及代码的重⽤,所以把具有独⽴功能的代码块组织为⼀个⼩模块,这就是函数

    函数的定义

      函数定义的三种方式:无参函数,有参函数,空函数

    #无参函数
    def demo_print():
        print('hello')
    
    #有参函数
    def add(x,y):
        print(x+y)
    
    #空函数
    def foo(x,y):
        pass

    函数调用

      调⽤函数很简单的,通过函数名() 即可完成调⽤:demo_print()

      函数使用的原则是:先定义,再调用

    函数的注释

    def demo_ano():
        '''
      注释
        '''
        print('-------')

      使用help(demo_ano)可以看到函数的相关说明

    函数参数

      形参与实参:形参即变量名,实参即变量值,函数调用时将实参赋值给形参 

    def add(a,b):
         s=a+b
        return s
    
    add(1,2)
    #(a,b)为形参,(1,2)为实参

      位置参数:按照从左到右的顺序定义的参数

    def add(num1,num2):
        s=num1+num2
        return s
    
    add(5,6)
    
    (num1,num2)为位置形参,(5,6)为位置实参

      关键字参数:按照key=value的形式定义的参数

    def login(name,pwd):
        if name=='luoli' and pwd=='123456':
            print('Login Sucess')
        else:
            print('Login failed')
    
    login(pwd='123456',name='luoli')

      默认参数:形参在定义时就已经为其赋值

    def add(a,b=3):
        s=a+b
        print(s)
    
    add(3)
    add(5,10)
    
    默认参数只在定义时赋值一次,可以传值,也可以不传值,默认参数的定义应该在位置参数的右边,默认参数通常定义成不可变类型

      可变长参数:可变长指的是实参值得个数不固定,实参位置实参和关键字实参两种,针对这两种形式的可变长参数,形参有对应的两种方式来存放它们,即*args和**kwargs

      *args

    def foo(x,y,*args):
        print(x,y)
        print(args)
    
    foo(1,2,3,4,5)
    
    def foo(x,y,z):
        print(x,y,z)
    
    foo(*[1,2,3])

      **kwargs:必须按照key=value的方式赋值

    def foo(x,y,**kwargs):
        print(x,y)
        print(kwargs)
    
    foo(1,2,z=3,p=4,q=5)
    
    def foo(x,y,**kwargs):
        print(x,y)
        print(kwargs)
    
    foo(**{'z':1,'x':2,'y':4})

      *args,**kwargs:对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的

      命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递

    def foo(x,y,*args,a=1,b,**kwargs):
        print(x,y)
        print(args)
        print(a)
        print(b)
        print(kwargs)
    
    foo(1,2,3,4,5,b=3,c=4,d=5)

    函数返回值

      所谓“返回值”,就是函数中程序完成后,最后给调⽤者返回的结果,如果想要使用这个结果,那么就需要保存该返回值

    def add(a,b):
        return a+b
    
    res=add(1,2)
    print(res)

    函数类型

      无参数,无返回值

    def demo_print():
        print('test')
    
    demo_print()

      无参数,有返回值

    import time
    def get_time():
        current_time=time.time()
        return current_time
    
    res=get_time()
    print(res)

      有参数,无返回值

      此类函数,能接收参数,但不可以返回数据,⼀般情况下,对某些变量设置数据⽽不需结果时,⽤此类函数

      有参数,有返回值

    def add(a,b):
        return a+b
    
    res=add(100,200)
    print(res)

    练习

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

    def modify_file(source_file,old,new):
        import os
        with open(source_file,'r',encoding='utf-8') as read_f,
            open('.bak.swap','w',encoding='utf-8') as write_f:
            for line in read_f:
                if old in line:
                    line=line.replace(old,new)
                write_f.write(line)
        os.remove(source_file)
        os.rename('.bak.swap',source_file)
    View Code

      (2)写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数

    def count(charac):
        d={
            'num':0,
            'str':0,
           'space':0,
            'others':0,
        }
        for i in charac:
            if i.isdigit():
                d['num']+=1
            elif i.isalpha():
                d['str']+=1
            elif i.isspace():
                d['space']+= 1
            else:
                d['others']+=1
        return d
    #res=count('hello123 hh ****')
    #print(res)
    View Code

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

    def my_len(model):
        i=len(model)
        if i > 5:
            print('%s长度大于5'%model)
        else:
            print('%s长度小于5'%model)
    
    # my_len([1,2,3,4,5,6])
    # my_len('sdf')
    View Code

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

    def li_len(li):
        if len(li)>2:
            li=li[0:2]
        return li
    
    res=li_len([1,2,3,4])
    print(res)
    View Code

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

    def mod_odd(mod):
        mod=mod[::2]
        return mod
    
    res=mod_odd([1,2,3,4,5])
    print(res)
    View Code

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

    def di_len(di):
        for k,v in di.items():
            if len(v) > 2:
                di[k]=v[0:2]
        return di
    
    dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    res=di_len(dic)
    print(res)
    View Code

     

  • 相关阅读:
    【Python开发】python使用urllib2抓取防爬取链接
    【Python开发】python使用urllib2抓取防爬取链接
    【Python开发】Python之re模块 —— 正则表达式操作
    【Python开发】Python之re模块 —— 正则表达式操作
    【Python开发】Url中文字符时记得转码edcode("utf-8")
    【Python开发】Url中文字符时记得转码edcode("utf-8")
    【Python开发】urllib2异常处理
    【Python开发】urllib2异常处理
    【Python开发】urllib2.urlopen超时问题
    【Python开发】urllib2.urlopen超时问题
  • 原文地址:https://www.cnblogs.com/iamluoli/p/8082873.html
Copyright © 2011-2022 走看看