No.10函数(二)

时间:2020-03-19 09:15:40   收藏:0   阅读:54

No.10

今日概要

内容回顾和补充

1.面试题相关

2.回顾

2.1知识点

  1. 函数基本结构

    def func(name,age,email):
        #函数体(保持缩进一致)
        a = 123
        print(a)
        return 8  #一旦遇到return后面代码就不执行
        b = 456
        print(b)
    
    m = func(1,2,3)   
    #定义函数时设置了参数,调用时一定要写参数,设置了几个就写几个。
  2. 参数

    def func(n1,n2):
        print(n1,n2)
    
    func(1,2)
    func([1,2],{a:1,b:2})
    #严格按照顺序传参数:位置方式传参。
    #实际参数可以是任意类型。
  3. 返回值

    • 函数没有返回值时,默认返回None。

    • 函数内部执行过程中遇到return,则终止。

      def fun():
          return '完成'  #函数每次执行到此就返回,下面代码永远不执行。
          for i in range(10):
              print(i)
      fun()
      
      def fun():
          for i in range(10):
              print(i)
              return '完成'  
      fun()              #调用时只会打印0
    • return可以返回任意类型。

      def fun():
          return (1,2,3)
      v = fun()
      print(v)
      
      #特殊:返回元组
      def fun():
          return 5,8,'alex'
      v = fun()
      print(v)

2.2练习题

技术分享图片

def func(x):
    v = x[1::2]
    return list(v)

v1 = func([1,2,3])
v2 = func((1,2,3))
#其它类型可以通过list(type)强制转换成列表
dic = {'k1':1,'k2':2}
lst = list(dic)
print(lst)
['k1','k2']
#字典转列表,默认是循环key
def sum(data):
    v = True if len(data) > 5 else False
    return v
msg = input('>>>')
print(sum(msg))

def sum(a,b):
    return a if a - b > 0 else b
msg = sum(11,2)
print(msg)
def func(name,gender,age,edu):
    # template = '%s*%s*%s*%s'%(name,gender,age,edu,) 
    # return template
    lst = [name,gender,age,edu]
    return '*'.join(lst)
       
a = input('>>>')
b = input('>>>')
c = input('>>>')
d = input('>>>')
result = func(a,b,c,d)
print(result)
def fun(max):
    lst = []
    while True:
        if len(lst) == 0:
            lst.append(1)
        if len(lst) == 1:
            lst.append(1)
        else:
            n = lst[-1] + lst[-2]
            if n > max:
                break
            lst.append(n)
    return lst

fun(300)
#写函数验证用户名是否在文件中,如果存在返回True,不存在返回False。
#函数有一个参数,用于接收用户输入的用户名。
'''文件格式
1|alex|123123
2|eric|rewrew
3|wupeiqi|ppp
'''
方式一
def fun(name):
    with open('文件操作练习.txt', mode = 'r',encoding = 'utf-8') as obj:
        content = obj.read()
        flag = False
        row_list = content.split('\n')
        for row in row_list
            v = row.split('|')
            if v[1] == name:
                flag = True
    return flag
方式二
def fun(name):
    with open('文件操作练习.txt', mode = 'r',encoding = 'utf-8') as obj:
        content = obj.read()
        row_list = content.split('\n')
        for row in row_list
            v = row.split('|')
            if v[1] == name:
                return True
v = func('alex')
if v:
    print('存在')
else:
    print('不存在')

内容详细

1.参数

  1. 基本的参数知识

    • 任意个数
    • 任意类型
    def func(a,b,c,d):
        print(a,b,c,d)
    
    func(1,'alex',True)
  2. 位置传参(调用函数并传入参数)

    def func(a1,a2):
        print(a1,a2)
    
    func(1,2)
    #定义了几个参数,调用时就传入几个参数,每个实际参数和形式参数一一对应。
  3. 关键字传参

    def func(a1,a2):
        print(a1,a2)
    
    func(a1=6,a2=66)
    func(a2=66,a1=6)
    #调用函数时写上定义函数所设置的参数名字,就可以任意换位了。
    
    def func(a1,a2,a3):
        print(a1,a2,a3)
    
    func(1,6,a3=9)
    func(1,a2=6,a3=9)
    #位置传参和关键词传参可以混合使用。
    func(a1=1,6,9)
    #混合使用时,需要保证位置参数在前,关键字参数在后,不然会报错。
    func(1,a1=6,a3=9)
    #会先处理位置参数再处理关键字参数,这样会因参数多值而报错。
  4. 默认参数(定义)

    def func(a1,a2=9)
     print(a1,a2)
    
    func(1)
    #func函数可以接受两个参数,再调用函数进行传值时可以只传一个参数,另个参数使用默认值。
    def func(a1,a2,a3=6,a4=9):
        print(a1,a2,a3,a4)
    
    func(1,2)
    func(1,2,3)
    func(1,2,3,4)
    func(1,2,3,a4=4)
    func(1,2,a=3,4)  #报错,关键字传参一定要放在位置传参后面。
  5. 万能参数(打散)

    • *args
      • 可以接受任意个位置参数,并将参数转换成元组。
        • 调用函数有*(打散容器类数据)
        • 调用函数无*
      • 只能用位置传参
    情况1
    def func(*a):  # 一般写成*args,潜规则
        print(a)
    
    func(1)        # 结果是元组(1,)
    func(1,2,[3,4],567,'alex')
    func((1,2,3))  # ((1, 2, 3),)
    func(*(1,2,3)) # (1, 2, 3)
    
    情况2
    def func(a1,*args):
        print(a1,args)
    
    func(1,2,3)    
    func(a1=1,2,3) # 报错,关键字永远在位置参数后。
    
    情况3:基本遇不到
    def func(a1=3,*args,a2=6):
        print(a1,args,a2)
    
    func(1,2,3)    # a1的默认值永远会被覆盖,a2不用关键字传参永远默认值。
    func(a1=1,2,3,a2=4) # 报错,关键字永远在位置参数后。
    func(1,2,3,a2=4)
    • **kwargs
      • 可以接受任意个关键字参数,并将参数转换成字典。
        • 调用函数有**(只能是字典)
        • 调用函数无**
      • 只能用关键字传参
    def func(**kwargs):
        print(kwargs)
    
    func(a=1,b='alex')  # 只能用关键字传参
    #结果{'a': 1, 'b': 'alex'}
    
    def func(**v):
        print(v)
    
    func(**{'a':11,'b':'eric'}) 
    #结果{'a': 11, 'b': 'eric'}
    • 综合应用:无敌 + 无敌
    def func(*args,**kwargs)
     print(args,kwargs)
    
    func(1,2,3)
    func(1,2,3,k1=4,k2=5,k3=6)
    func(*[1,2,3],**{'k1':4,'k2':5})
    func(11,22,*[1,2,3],k0='a',**{'k1':4,'k2':5})
    #(1, 2, 3) {}
    #(1, 2, 3) {'k1': 4, 'k2': 5, 'k3': 6}
    #(1, 2, 3) {'k1': 4, 'k2': 5}
    #(11, 22, 1, 2, 3) {'k0': 'a', 'k1': 4, 'k2': 5}
  6. 参数相关的重点:

    1. 定义函数
    def func1(a1,a2):
        pass
    
    def func2(a1,a2=None):
        pass
    
    def func3(*args,**kwargs):
        pass
    1. 调用函数
      • 位置参数 > 关键字参数

2.作用域

Python中:

总结

原文:https://www.cnblogs.com/elliottwave/p/12521805.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!