zoukankan      html  css  js  c++  java
  • python 定义函数

    函数参数总结

    1.位置匹配 func(name)
    2.关键字匹配 func(key=value)
    3.收集匹配
      1.元组收集 func(name,arg1,arg2)
      2.字典收集 func(name,key1=value1,key1=value2)
    4.参数顺序

    1.位置匹配 func(name)

    def func(arg1,arg2,arg3):
        return arg1,arg2,arg3
    
    print func(1,2,3)

    (1, 2, 3)

    2.关键字匹配 func(key=value)

    和顺序无关,可以有默认值。

    def func1(k1='',k2=None,k3=''):
        return k1,k2,k3
    
    print (func1(k3=5,k1=4,k2=3))
    print (func1(k1=1,k3=2))
    (4, 3, 5)
    (1, None, 2)

    3.收集匹配
      1.元组收集 func(name,arg1,arg2)
      2.字典收集 func(name,key1=value1,key1=value2)

    def func2(a,d,b=4,*kargs,**kwargs):
        return kargs
    print (func2(2,3,4,5,6,7,9,[1,2,3,4],{1:2,3:4}))
    
    def func2(*kargs,**kwargs):
        return kargs
    print (func2(2,3,4,5,6,7,9,[1,2,3,4],{1:2,3:4}))
    
    def func2(*kargs,**kwargs):
        return kargs
    print (func2(2,3,4,{1:2,3:4},[1,2,3,4],5,6,7,9))


    (5, 6, 7, 9, [1, 2, 3, 4], {1: 2, 3: 4})
    (2, 3, 4, 5, 6, 7, 9, [1, 2, 3, 4], {1: 2, 3: 4})
    (2, 3, 4, {1: 2, 3: 4}, [1, 2, 3, 4], 5, 6, 7, 9)

    4.参数顺序

    1.先是位置匹配的参数    a, d
    2.再是关键字匹配的参数  b=4
    3.收集匹配的元组参数     *kargs  一个星号是元祖
    4.收集匹配的关键字参数  **kwargs 两个星号是字典

    5. 一些习题

    '''
    1.定义一个func(name),该函数效果如下。
    assert func("lilei") = "Lilei"
    assert func("hanmeimei") = "Hanmeimei"
    assert func("Hanmeimei") = "Hanmeimei"
    '''

    1 def capstr(name):
    2     return name.capitalize()


    """
    2.定义一个func(name,callback=None),效果如下。
    assert func("lilei") == "Lilei"
    assert func("LILEI",callback=string.lower) == "lilei"
    assert func("lilei",callback=string.upper) == "LILEI"

    """

     1 import string
     2 def swastr(name, callback=None):
     3     '''
     4     swastr(name, callback=None) -> str
     5     name is a str.return a str of required tyoe,or a capitalize type if is not required.
     6     '''
     7     if callback == None:
     8         return name.capitalize()
     9     else:
    10         return callback(name) 

    """
    3.定义一个func(*kargs),效果如下。

    l = func(1,2,3,4,5)
    for i in l:
    print i,
    #输出 1 2 3 4 5

    l = func(5,3,4,5,6)
    for i in l:
    print i
    #输出 5 3 4 5 6

    """

    def getitem(*kargs):
        return kargs

    """
    4.定义一个func(*kargs),该函数效果如下。

    assert func(222,1111,'xixi','hahahah') == "xixi"
    assert func(7,'name','dasere') == 'name'
    assert func(1,2,3,4) == None

    """

    def shortstr(*kargs):
        '''
        shortstr(*kargs) -> str or None
        return the shortest str in the kargs, or return None if no str in it.
        '''
        #过滤非字符串
        lis = filter(lambda x:isinstance(x,str),kargs)
        #收集长度
        len_lis = [len(x) for x in lis]
    
        if len_lis:
                min_index = min(len_lis)
                return lis[len_lis.index(min_index)]         #这两部绝对精华呢!
        return None

    """
    5.定义一个func(name=None,**kargs),该函数效果如下。

    assert func(“lilei”) == "lilei"
    assert func("lilei",years=4) == "lilei,years:4"
    assert func("lilei",years=10,body_weight=20) == "lilei,years:4,body_weight:20"

    """

    def detail(name=None,**kargs):   #方法一
        '''
        detail(name=None,**kargs) -> str
        name is a str.return a str like'name,key1:value1,key2:value2'    这个函数特定的功能
        '''
        data = []
        for x,y in kargs.items():
            data.extend([',', str(x), ':', str(y)])
       
        info = ''.join(data)
        return '%s%s'%(name,info)
    
    def func(name=None,**kargs):    #方法二
        lis = ["%s:%s"%(k,v) for k,v in kargs.items()]
        lis.insert(0,name)
        return ','.join(lis)
    #coding =utf-8
    #Lesson: 进阶篇3-函数第二节
    
    '''
    1  定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型。
       其它类型则报错,并且返回一个偶数列表:(列表里面的元素为偶数)
    '''
    def get_num(num_list):
        '判断列表里面的元素为数字类型'
    
        num_list_k = []
    
        if not isinstance(num_list,list):        # isinstance(object, classinfo) object的类型
    return '请输入以list为类型的参数。'
    
        else:
            for i in num_list:
                if not isinstance(i,int):
                    return '列表里面的元素必须为数字类型。'
                elif i % 2 == 0:
                    num_list_k.append(i)
        return num_list_k
    
    print (get_num([1,2,5,6,8,20]))
    
    assert get_num([1,2,5,6,8,20])== [2,6,8,20],'断言得到的结果。'
    assert get_num((1,2,5,7,9,3))=='请输入以list为类型的参数。'
    assert get_num([1,'abcd',5,6,8,20])=='列表里面的元素必须为数字类型。'
    
    print(get_num.__doc__)           # 属性__doc__可以输出文档字符串的内容  
    ##################################################################################################
    '''
    2 定义一个方法get_page(url),url参数是需要获取网页内容的网址,
      返回网页的内容。 提示(可以了解python的urllib模块)。
    '''
    # 方法一
    from urllib.request import urlopen
    
    def get_page(url):
        '返回网页的内容'
    
        if not isinstance(url,str):
            return '输入的网址类型不对。'
        elif url.startswith('http://'):
            url_info = urlopen(url).read()
            return url_info
    
        else:
            return '请检查您输入的网址格式,网址要以 http:// 开始。'
    
    print (get_page('http://www.baidu.com'))
    
    assert get_page('www.baidu.com') =='请检查您输入的网址格式,网址要以 http:// 开始。'
    assert get_page(123) == '输入的网址类型不对。'
    ###################################################################################################
    # 方法二
    def get_page(url):
        if not isinstance(url,str):
            return '输入的数据类型不对。'
        if not ur.startswith('http://') and not url.startswith('http://'):
            return "error url_format"
    
        try:
            url_info = urlopen(url).read()
        except Exception as e:
            logging.debug(e)
        else:
            return url_info
    assert get_page('www.baidu.com') == '请检查您输入的网址格式,网址要以 http:// 开始。'
    assert get_page(123) == '输入的网址类型不对。'
    ###################################################################################################
    
    '''
    3 定义一个方法 func, 该func引入任意多的列表参数,返回所有列表中最大的那个元素。
    '''
    
    def func(*l_args):
        all_list = []
        for i in l_args:
            if isinstance(i,list):
                all_list.extend(i)
            else:
                return '请输入正确的列表参数。'
        all_list.sort()
    
        return all_list[-1]
    print (func([1,845,10000,7,8,9,]),[8888800,3345,111],[1,2,3]))
    assert func([4,5,7,19],[3,5,7],[1,2,3]) == 19,'断言结果为最大的数19'
    assert func([4,5,7,19],'abc',[1,2,3]) == '请输入正确的列表参数。'
    #######################################################################################################
    '''
    4 定义一个方法get_dir(f), f参数为任意一个磁盘路径,该函数返回路径下的所有文件夹组成的列表,
      如果没有文件夹则返回“not dir”
    '''
    
    import os
    
    def get_dir(f):
    
        l_dir = []
    
        if not os.path.isdir(f):
            return '输入的磁盘路劲的参数不正确。'
    
        else:
            for i in os.listdir(f):
                l_dir.append(i)
    
            if l_dir == []:            #  if l_dir:       后面的代码更好看
                return 'Not dir'     #     return l_dir
            else:                      #  else:
                return l_dir           #     return 'Not dir'
    print (get_dir('test/'))
    assert type(get_dir('test/'))== list,'is list'
    assert get_dir('123') == '输入的磁盘路径的参数不正确。'
  • 相关阅读:
    HTML/CSS的学习过程一览
    C++ MFC实现基于RFID读写器的上位机软件
    Java实现UDP之Echo客户端和服务端
    Java实现TCP之Echo客户端和服务端
    Java实现Socket之WhoisClient
    Java实现Socket之TimeClient
    openWRT自学---针对backfire版本的主要目录和文件的作用的分析整理
    openWRT自学计划安排
    openWRT自学---对官方的开发指导文档的解读和理解 记录2:如何控制内核模块的编译
    openWRT自学---对官方的开发指导文档的解读和理解 记录1:编译一个package
  • 原文地址:https://www.cnblogs.com/think-and-do/p/6357417.html
Copyright © 2011-2022 走看看