• 函数(概念,基本使用,定义格式,调用格式,参数种类)


    一、函数
    1、what
    具备某一功能的工具===》函数

    工具的使用:
    事先准备好工具==========》函数的定义
    遇到应用场景拿来就用====》函数的调用
    2、why
    1、程序的组织结构不清晰,可读性差
    2、如果要用到重复的功能,只能拷贝功能的实现代码=》代码冗余
    3、可扩展性差
    3、how
    函数的使用原则:先定义,后调用

    定义函数:
    def 函数名(参数1,参数2,参数3,...):
    """文档注释"""
    代码1
    代码2
    代码3
    ...
    return 返回值
    调用函数:
    函数名(值1,值2,值3,...)
    ps:函数名尽可能写成动词,不要写成名词
    二:函数的基本使用
    1、定义函数:申请内存空间把函数体代码保存下来,然后把内存地址绑定给函数名-》函数名=函数的内存地址
    def sayhi():
        print('*'*10)
        print('hello')
        print('*'*10)
    
    print(sayhi)#打印出来的是函数名的内存地址
    2、调用函数: 函数名()=> 函数的内存地址(),会触发函数体代码的运行
    sayhi()
    sayhi()
    sayhi()#可以多次调用,调用一次函数运行一次
    三:定义函数的三种格式
    1、 无参函数(就是函数没有参数)
    def sayhi():
        print('='*100)
     
    sayhi()
    2、 有参函数
    def sayhi(s,n):
        # s = '-'
        # n = 20
        print(s*n)
        print('hello')
        print(s*n)
    
    sayhi('-',20)
    3、 空函数
    def func():
        pass
    四:函数的调用
    return : 函数内可以有多个return,但只要执行一次函数就立刻结束,并会把return后的值当作本次调用的结果返回
    函数可以有三种形式的返回值
    1、return 值:返回的就是该值本身
    2、return 值1,值2,值3:返回一个元组
    3、没有return:默认返回None
    五:函数调用的三种格式
    1、 语句形式:单纯地调用一下函数就完了
    def sayhi(s,n):
        print(s*n)
        print('hello')
        print(s*n)
    
    sayhi('*',30)
    2、 表达式形式:
    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    
    res=max2(11,22) * 12
    print(res)
    3、 可以把函数的调用当作值传给另外一个函数
    def sayhi(s,n):
         print(s*n)
         print('hello')
         print(s*n)
    sayhi('*',30)
    print(sayhi('*',30))
    总结:
    函数的使用一定要分两个阶段去看:
    1、定义阶段:只检测语法,不执行代码
    2、调用阶段:执行函数体代码

    如果发生的语法错误,定义阶段就会立马检测出来
    def func():
    print("hello" #语法错误

    如果发生的不是语法错误,而是逻辑错误,只能在调用阶段检测到
    def func():
    xxx #逻辑错误
    func()
    ps:调用函数时还没定义的函数一定会报错,一定要搞清楚函数定义的两个阶段
    示范1:
    def bar():
        print(' bar')
    def foo():
        print(' foo')
        bar()
    foo()   #foo bar
    
    示范2:
    def foo():
        print(' foo')
        bar()
    def bar():
        print(' bar')
    foo()  #foo bar  这里的def bar()在函数定义阶段就已经定义好了
    六:函数的参数分为两大类

    1、形参:在定义函数时,括号内定义的变量名,称之为形式参数,简称形参=》变量名
    2、实参:在调用函数时,括号内传入的值,称之为实际参数,简称实参=》变量值
    七:在python中参数的种类

    1、位置参数:
    (1)位置形参:在函数定义阶段按照从左到右的顺序依次定义形参(变量名),称之为位置形参
    特点:必须被传值
    def func(x,y):
        print(x,y)
    func(1,2)
    func(1) # 少一个不行
    func(1,2,3) # 多一个也不行
    (2)位置实参:在函数调用阶段按照从左到右的顺序依次定义实参(传入的变量值),称之为位置实参
    特点:按照位置传值,一一对应
    func(1,2,3,4,5,6)#数量由传入的变量名而定
    2、关键字实参:在函数调用阶段按照key=value的形式为指定的形参名传值,该形式称之为关键字实参
    特点:在传值时可以完全打乱顺序,但是仍然能够指名道姓地为指定的形参传值
    func(x=1,y=2)
    注意:可以混用位置实参与关键字实参,但是
    1 位置实参必须放在关键字实参的前面
    2 不能为同一个形参重复赋值
    def func(name, age, salary):
        print(name)
        print(age)
        print(salary)
    func('egon', 18, salary=3.1)
    # func('egon',salary=3.1,age=18)
    # func('egon',salary=3.1,18) # 错误,SyntaxError
    # func('egon',18,age=19,salary=3.3)# 错误,TypeError
    3、默认形参:在函数定义阶段就已经为某个形参赋值,该形参称之为有默认值的形参,简称默认形参
    特点: 定义阶段就已经被赋值意味着在函数调用阶段可以不用为其赋值
    def func(x,y=2):
        print(x,y)
    func(1) #1 2
    func(1,33333)#1 33333
    注意:
    (1)默认形参应该放在位置形参的后面
    def func(y=2,x): # 错误
        pass
    func(1,2)
    (2) 默认形参的值通常应该是不可变类型
    #达不到用意
    def
    func(name,hobby,hobbies=[]): hobbies.append(hobby) print("%s 的爱好是:%s" %(name,hobbies)) func("egon",'play') #egon 的爱好是:['play'] func('lili','music') #lili 的爱好是:['play', 'music'] func("jack",'read') #jack 的爱好是:['play', 'music', 'read'] #达到用意 def func(name,hobby,hobbies=None): if hobbies is None: hobbies=[] hobbies.append(hobby) print("%s 的爱好是:%s" %(name,hobbies)) func("egon",'play') #egon 的爱好是:['play'] func('lili','music') #lili 的爱好是:['music'] func("jack",'read') #jack 的爱好是:['read']
    (3) 默认形参的值只在函数定义阶段被赋值一次,函数定义之后的改变对默认形参没有影响
    m=333
    def func(x,y=m): # y=333
        print(x,y) 
    
    m=44444
    func(1) #调用后打印1 333 在定义阶段把y赋值为333,调用时如果y不再传值的话就不受影响
    func(1,2) #调用后打印1 333 在定义阶段把y赋值为333,调用时如果传值,按照传的值来
    #默认形参示范
    def
    register(name,age,gender='male'): print(name) print(age) print(gender) register('tom',21,) register('egon',18,'female') #可以传值改变默认值,也可以不传就用默认值
    ps:位置形参,一定要传值
       默认形参,可以不传值



  • 相关阅读:
    Intel汇编程序设计-整数算术指令(上)
    Intel汇编程序设计-整数算术指令(上)
    Windows核心编程 第四章 进程(下)
    Windows核心编程 第四章 进程(下)
    Windows核心编程 第四章 进程(中)
    Windows核心编程 第四章 进程(中)
    PAT L2-017 人以群分
    PAT 1087 有多少不同的值
    PAT 1086 就不告诉你
    PAT 1020 月饼
  • 原文地址:https://www.cnblogs.com/guojieying/p/13334099.html
Copyright © 2020-2023  润新知