美文网首页
python 10天快速教程 Day3

python 10天快速教程 Day3

作者: XaviSong | 来源:发表于2020-07-16 19:38 被阅读0次

本节重点

  1. 函数的定义
  2. 局部变量与全局变量
  3. 调用函数的传参方式
  4. 不定长参数
  5. 缺省参数
  6. 函数参数的高级使用
  7. 函数的嵌套

一、函数的定义

定义:

某一功能的代码实现,可以降低代码冗余,达到对代码进行复用的目的。

注意

函数名不要和已有函数、变量相同,要见名知意,参考变量的命名规范,同名情况会覆盖。

基本形式:
def function(parameter1,parameter2): 
    '''
    parameter1,parameter2为形式参数,一般称为形参
    '''
    process

# 调用函数
function(p1,p2) # p1,p2一般称为实参
带返回值的形式:
def get_sum(nums):
    '''
    通过return 带数据返回函数的调用处
    '''
    sum = 0
    for i in nums:
        sum = sum + i
    return sum
nums = [1,2,3,4]
result = get_sum(nums)

# 还有一种形式,指定参数与返回值得类型
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        '''
        参数与返回值的类型都被指明,其中参数self表示这是一个类内的方法
        '''
        for value in nums:
            if value >= target:
                return nums.index(value)
            elif nums.index(value) == len(nums)-1:
                return nums.index(value) + 1
函数的调用顺序

定义函数时不会执行函数体内的代码,必须调用后才会开始执行。调用时程序会返回到函数的定义处,执行函数体里面的代码,执行完毕返回调用处。可结合断点查看程序运行的顺序。

二、局部变量与全局变量

定义

局部变量:在函数内定义的变量叫做局部变量,只能在函数中使用。

def show():
    num = 1
    print(num)

print(num) # 失败,局部变量生命周期仅在其定义的函数内

全局变量:在函数外定义的变量,可以在不同的函数中使用

num_global = 1
def show():
    num_global = 2
    print(num_global)
show()
print(num_global)
'''
2,1
结果与预期不符,函数没有对全局变量进行修改
'''

注意!:这里不叫给全局变量num_global修改值,这里相当于定义了一个局部变量num_global = 2,只不过其与全局变量重名

那么如何使用函数修改全局变量呢?

# 要真正修改全局变量,需要关键字global
num_global = 1
def show():
    global num_global
    num_global = 2 
    print(num_global)
show()
print(num_global)

三、调用函数的传参方式:

1、位置传参

调用函数传参时,不需要指明形参,直接输入实参按照顺序分配给形参

def show(name,age):
    print(name,age)

show("syp",18) 
show(18,"syp")
'''
syp 18
18 syp
'''

位置传参的局限,必须按照形参规定的顺序传,否则就与形参意义不符。

2、关键字传参

可以不按照形参的顺序进行传参,需要指明实参与对应形参

def show(name,age):
    print(name,age)
show(age = 18, name = "syp")
'''
syp 18
'''

必须使用关键字传参的形式:

# *后面要求必须使用关键字传参,之前的无所谓,可以使用位置传参

def callable(address,*,name,age):
    print(address,name,age)
callable("Beijing",name = "syp", age = 20)
3、能不能混用?

其实是可以的,只不过要按照先位置传参后关键字传参的方式,而且要要和形参名对应起来,混用的一般比较少。

def show(name,age):
    print(name,age)
show("syp",age = 19)
show(name="syp",18)   # 报错,告知位置传参不能在关键字传参后面
show(18,name = "syp") # 报错,告知name被赋予了两个值,形参名没对应

四、不定长参数

1、不定长位置参数:

调用函数时不确定函数参数的数量:0个或多个均可。规定了只能以位置传参调用。

def sum_num(*args):
    '''
    在()中使用*args来代表,使用不定长位置参数,可以不叫args但是一般约定都这么命名
    传入的位置参数封装到args元组中
    '''
    print(args, type(args))
    sum = 0
    for value in args:
        sum += value
    return sum 

sum_num(1,2,3,4)
'''
(1,2,3,4)<class 'tuple'>
'''

不定长位置参数的使用

在两个函数间连续传递不定长位置参数,会出现对元组的再包装,可使用*拆包args元组。

# 不定长位置参数的使用
def show_msg(*args):
    print(args)

def show(*args):
    print(args,type(args))
    show_msg(args)

show(1,2)
'''
(1, 2) <class 'tuple'> 对元组(1,2)再包装,包为新的元组
((1, 2),)
'''

# 如果想继续以(1,2)的方式向下传,需要把元组拆开
def show_msg(*args):
    print(args)

def show(*args):
    print(args,type(args))
    show_msg(*args) # 区别,添加一个星号

show(1,2)
'''
(1, 2) <class 'tuple'>
(1, 2)
'''
2、不定长关键字参数:

调用函数时不确定函数参数的数量:0个或多个均可。规定了只能以关键字传参调用。

def show_msg(**kwargs):
    '''
    一般命名为kwargs,前面加两个*号,表示使用不定长关键字参数
    传入的关键字参数封装到kwargs字典中
    '''
    print(kwargs, type(kwargs))
    for key ,value in kwargs.items():
        print(key,value)

show_msg(a = 1, b = 2)
'''
{"a":1,"b":2}<class 'dict'>
a 1
b 2
'''

不定长关键字参数的使用

在两个函数间连续传递不定长关键字参数,会出现对字典的再包装,形成嵌套字典可使用**拆包kwargs字典。

# 不定长关键字函数的使用,类比以上不定长位置参数使用的例子
def show_msg3(**kwargs):
    print(kwargs)
    
def show3(**kwargs):
    # 拆包方式,不加**则为嵌套字典
    show_msg3(**kwargs)
show3(a=1,b=2)

五、缺省参数

在函数定义时就有默认值,可以重新赋值进行覆盖。

def sum(num1,num2 = 2):
    '''
    num1是必选参数,缺省参数必须放在必选参数后面
    '''
    return num1+num2

print(sum(1,5))
print(sum(1))
'''
6
3
'''

六、函数的高级使用

混合了各种参数的情况:必选参数,不定长位置参数,不定长关键字参数

def show(name,age,*args,**kwargs):
    '''
    必选参数,不定长位置参数,不定长关键字参数
    '''
    print(name,age,args,kwargs)

#规范:位置传参必须在关键字传参前面,不定长放在最后面
show("syp",18,1,2,3,4,a = 1,b = 2)

#这种方式也可以,但是不常用,这里name和age必须使用关键字传参,否则使用位置传参会被归类到args中
def show(*args,name,age,**kwargs):
    print(name,age,args,kwargs)

show(1,2,3,name = "syp",age = 18, a = 1,b = 2)
'''
syp 18 (1, 2, 3, 4) {'a': 1, 'b': 2}
syp 18 (1, 2, 3) {'a': 1, 'b': 2}
'''

七、函数的嵌套

在函数中再定义一个函数,新定义函数只能在旧函数中调用。如果想在外部使用,需要在调用旧函数时将新函数名返回,在外部承接函数名后,再进行调用。

示例:

'''
函数嵌套:在函数中再定义一个函数
'''
def callable():
    def test():
        print("I'm a function")
    test()
callable()

# 想在外部直接调用test
def callable1():
    def test():
        print("I'm a function")
    return test
test = callable1()
test()
'''
I'm a function
I'm a function
'''

上一篇:python 10天快速教程 Day2
下一篇:python 10天快速教程 Day4

相关文章

  • Python 快速教程(网络)

    注:采转归档,自己学习查询使用 Python 快速教程(网络01):原始Python服务器Python 快速教程(...

  • Python 文档手册

    Python 官方文档 Vamei老师-Python快速教程 廖雪峰老师-Python教程 笨办法学Python ...

  • Python 快速教程(Django)

    注:采转归档,自己学习查询使用 Python 快速教程(Django01):初试天涯Python 快速教程(Dja...

  • 首次简书日记_Python资料相关

    Vamei的Python快速教程 廖雪峰的入门教程 简明 Python 教程 实验楼Python学习路径: 系统的...

  • Python 快速教程(进阶篇)

    注:采转归档,自己学习查询使用 Python 快速教程(进阶篇01): 词典Python 快速教程(进阶篇02):...

  • Python 快速教程(深入篇)

    注:采转归档,自己学习查询使用 Python 快速教程(深入篇01):特殊方法与多范式Python 快速教程(深入...

  • 初级知识0

    1. Python Python 教程 Python笔记(jupyter) 快速学会python 2.Matplo...

  • Python 快速教程(标准库)

    注:采转归档,自己学习查询使用 Python 快速教程(标准库):走马观花Python 快速教程(标准库):学习准...

  • Python 快速教程(基础篇)

    注:采转归档,自己学习查询使用 Python 快速教程(基础篇01):Hello WorldPython 快速教程...

  • Python 快速教程(补充篇)

    注:采转归档,自己学习查询使用 Python 快速教程(补充篇01): Python的序列的方法Python 快速...

网友评论

      本文标题:python 10天快速教程 Day3

      本文链接:https://www.haomeiwen.com/subject/ekumhktx.html