Python全栈之路Day18

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈之路Day18相关的知识,希望对你有一定的参考价值。

初次编辑2017年10月23日,星期一

摘要

引用:Alex

  1. 定义函数
  2. 调用函数
  3. 函数返回值
  4. 函数的参数

一. 上节课复习

  1. write补充
    • f.write(‘111\\n‘)
      f.write(‘111\\n‘)
    • f.writelines([‘111\\n‘,‘222\\n‘]) #writelines 用法相当于write多行
      • writelines() 方法用于向文件中写入一序列的字符串。
        这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
        换行需要制定换行符 \\n
  2. truncate
    • truncate() 方法用于从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小

二. 定义函数

  1. 函数的定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
    • 特性:
      减少重复代码
      使程序变的可扩展
      使程序变得易维护
    • 注:函数的定义相当于变量的赋值,函数名相当于变量名,函数的代码相当于变量值;且定义阶段只检测函数的语法是否正确,但调用阶段则不同
  2. 函数分类
    1. 内置函数
    2. 自定义函数
      • def 函数名(arg1,arg2,arg3):
        ‘描述信息‘
        函数体
        return 1
  3. 函数的定义和调用
    1. 定义无参函数:调用时为函数调用的语句形式foo()
    2. 定义有参函数:定义时有参,调用时必须传参,且一般有返回值;调用时为函数调用的表达式形式res=bar(1,2)
    3. 定义空函数
  4. 函数的返回值
    1. 未在函数中指定return,那这个函数的返回值为None
    2. 如果return返回值为多个,会以元组的形式返回
    3. 总结:
      • 可以返回任意类型
      • return 1 ----> 1
      • return 1,2,3 -----> (1,2,3)
      • 没有return -----> None
      • 函数执行到return就会结束掉
  5. 变量的解压
    • ‘_‘、‘*_‘
  6. 函数的参数
    1. 形参:在函数定义阶段,括号内定义的参数,本质就是变量名
    2. 实参:在函数调用阶段,括号内定义的参数,必须要有一个明确的值,可被当成变量值
      • 注意:实参的值要为不可变类型
      • 在函数中不要去修改全局的变量
def foo(x,y)        #形参
    print(x)
    print(y)

foo(1,2)        #实参
  1. 在实参的角度的三种传值方式

    1. 按位置传值:

    def foo(x,y):
        print(x)
        print(y)

    foo(1,2)
    1. 按照关键字传值

    def foo(x,y):
        print(x)
        print(y)

    foo(x=1,y=2)
    1. 混用
    • 按位置传值必须在按关键字传值的前面
    • 对于一个形参,只能赋值一次,不能重复赋值

    def foo(x,y):
        print(x)
        print(y)

    foo(1,y=2)
  1. 从形参的角度分析

    1. 位置参数,必须传值的参数

def foo(x,y):
print(x)
print(y)

foo(1,2)
    1. 默认参数
      1. 默认参数必须放到位置参数的后面
    def foo(x,y=1):
    print(x)
    print(y)
    foo(2)
    • 默认参数在函数定义阶段,他的值就已经确定了

    sex =‘male‘
    def register(sex=x):        #register-----[sex = ‘male‘]
        print(sex)

    sex = None
    register()    #输出为male
    • 在函数中不要去修改全局的变量(不推荐下述方式)
    x=[]
    def register(name,name_list=x):
        name_list.append(name)
    register(‘ASB‘)
    register(‘YSB‘)
    register(‘WSB‘)
    print(x)        #[‘ASB‘,‘YSB‘,‘WSB‘]

三. 可变参数

  1. *args
    def foo(x,*args):    #args = (2,3,4,5,6,‘a‘,‘b‘)
        print(x)        
        print(args)
    foo(1,2,3,4,5,6,‘a‘,‘b‘)        #输出为1;(2,3,4,5,6,‘a‘,‘b‘) 
    • args 与位置参数和默认参数混用:*args要放到位置参数的后面
    def foo(x,*args,y=2)
        print(x)
        print(args)
        print(y)
    foo(1,2,3,4,5,y=1000)    #>>1;(2,3,4,5);1000
  1. 从形参的角度
def foo(*args):    #args=(1,2,3)
    print(args)
foo(1,2,3)
  1. 从实参的角度
def bar (x,y,z)
    print(x)
    print(y)
    print(z)
bar(*(1,2,3))    #bar(1,2,3)
  1. **kwargs
def foo(x,**kwargs):
    print(x)
    print(kwargs)
foo(1,y=2,a=3,b=4)    #<<1;{‘b‘:4,‘y‘:2,‘a‘:3}
  • 注意:**kwargs (按关键字传值),按位置传之后剩下的会给**,处理结果为{}字典的形式
    * args (按位置传值),按关键字传值剩下的会给*,处理结果为()元组的形式
    1. 混用
def foo(x,*args,**kwargs):
    print(x)
    print(args)
    print(kwargs)
foo(1,y=1,z=2)    #>>1,(),{‘y‘:1,‘z‘:2}
  1. 从形参的角度
def foo(**kwargs):    #{‘x‘: 1, ‘y‘: 2, ‘z‘: 3}
    print(kwargs)
foo(x=1,y=2,z=3)

3.从实参的角度

def foo(x,y,z=3):
    print(x)
    print(y)
    print(z)
foo(**{‘x‘:1,‘y‘:2,‘z‘:3})    #foo(x=1,y=2,z=3)
  1. 嵌套
def auth(name,password,sex=‘male‘):
    print(name)
    print(password)
    print(sex)
def foo(*args,**kwargs):    #args =(‘egon‘,‘123‘) kwargs= {}
    print(‘from foo‘)
    auth(*args,**kwargs)    #auth(*(‘egon‘,‘123‘),**{})---------auth(‘egon‘,‘123‘)

foo(‘egon‘,‘123‘)    >> 

作业

今日总结

  1. 待补充
















以上是关于Python全栈之路Day18的主要内容,如果未能解决你的问题,请参考以下文章

Python全栈之路Day1(补)

Python全栈之路Day1(补)

Python全栈之路Day19

18.python全栈之路:模块

Python全栈之路Day11

Python全栈之路Day15