Holmes-98

一、函数

函数的定义:将一组语句的集合通过一个函数名封装起来 ,想要执行这个函数,只需要调用函数名即可。

函数的三种类型:1.无参函数,2.有参函数.(函数体需要外部传递进来信息的)3.空函数

函数的特性:1.减少重复的代码  2.使程序变得可扩展  3.使程序变得易维护

def sayhi(a,b):
    res = a + b
    print(res)
    
sayhi(5,10)

二、参数

2.1 形参(在函数定义时定义的参数,相当于变量名)和实参(在调用函数时传入的值,相当于变量值)

def sayhi(a,b):  # (a,b)形参(占位)
    res = a + b
    print(res)
    
sayhi(5,10)  # (5,10) 实参(实际存在的值)

2.2 默认参数(在函数定义阶段,就已经为形参赋值【本质上是内存地址】的参数),默认参数不要定义成可变类型!!!

默认参数可填可不填;但要按顺序传;但必须放在末尾!!!

def stu_infor(name,age,country=\'CN\'):
    print(name,age,country)

stu_infor(\'jake\',22,)
stu_infor(\'BOB\',24,\'JP\')
stu_infor(\'ASD\',12,\'KM\')

 可变长参数

如果形参中出现*变量名,传递的参数就可以不再是固定个数,传过来的参数都会打包成元组

方式一:
def stu_info(name,*args,): print(name,args) stu_info(\'jake\',45,23,32,11) >>>>jake (45, 23, 32, 11) # 后面的数字都会传递给args
方式二:
def stu_info(name,*args,): print(name,args) stu_info(\'jake\',*[45,23,32,11])

2.3关键参数(在定义函数时,*后定义的参数)

可以不按顺序传,这时就会用到关键参数,只需要指定参数名就可以,但是必须放在位置参数之后!

def stu_infor(name,age,country=\'CN\'):
    print(name,age,country)

stu_infor(name=\'jake\',age=23,country=\'JP\')

 2.4 非固定参数

def stu_info(name,*args,**kwargs):
    print(name,args,kwargs)

stu_info(\'jake\',22,\'100w\',addr=\'北京\', num=1231214124212)

>>>>>>jake (22, \'100w\') {\'addr\': \'北京\', \'num\': 1231214124212}
def stu_info(name,*args,**kwargs):
    print(name,args,kwargs)

d = {\'addr\':\'北京\',\'num\':\'12312312424\'}
stu_info(\'jake\',22,\'100w\',**d)

# >>>>>>jake (22, \'100w\') {\'addr\': \'北京\', \'num\': \'12312312424\'}

三、函数的返回值

  定义: 函数外部的代码,想要获取函数的执行结果,使用return语句返回结果

      return会结束函数,后面的代码不会运行;如果未指定return就返回None.

def stu_info(name,age,**kwargs):
    print(name,age,kwargs)
    if age > 22:
        return False
    else:
        return True
stu = stu_info(\'JAKE\',24,cuontry=\'JP\')
print(stu)

>>>>>>>>JAKE 24 {\'cuontry\': \'JP\'}
>>>>>>>>False

    函数只能返回一个值;如果需要返回多个值,使用逗号分隔开,返回时回事一个元祖的类型,这个元祖代表的是一个值!

四、函数的局部变量

  定义:在函数内部的变量,可以在函数内部修改(在局部创建)变量。

name = "jake"  # 函数外部,全局变量
def change_name():
    name = \'Bob\'  # 函数内部,局部变量
    print(name,id(name))
change_name()
print(name,id(name))

>>>>>>Bob 2448164753624
>>>>>>jake 2448163922360

  1.在函数内部可以调用全局变量

  2.如果同一个变量在全局和局部都有,那么调用的顺序应当是由内而外的

4.1 函数内部修改全局变量

name = "jake"  # 函数外部
def change_name():
    global name  # 不建议使用
    name = \'Bob\'  # 函数内部
    print(name,id(name))
change_name()
print(name,id(name))

>>>>>>Bob 2691644231896
>>>>>>Bob 2691644231896

4.2 在函数内部修改数据

  列表,字典,集合,元祖 是可以被修改的,而字符串这种是不可以被修改的。

name_list = ["jake",\'Bob\',\'rain\']
def change_name():
    del name_list[2]
    name_list[1] = \'Amy\'
    print(name_list,id(name_list))
change_name()
print(name_list,id(name_list))

>>>>[\'jake\', \'Amy\'] 1908083114504
>>>>[\'jake\', \'Amy\'] 1908083114504
# 整体的列表内存地址并没有被修改,修改的是列表内部元素的的内存地址!!!

五、嵌套函数

5.1.函数内部可以再次被定义,2.要想执行函数就需要被调用

def func1():
    print(\'JAKE\')
    def func2():
        print(\'Bob\')
    func2()
func1()

为函数传参的两种方式:

方式一:直接把函数需要的参数定义成形参

方式二:利用闭包函数传参

def func():
    x = 4
    def func2():
        print(x)
    return func2
res = func()
print(res)
res()

5.2函数之间调用的逻辑关系

(一层一层往外面找,函数内部没有的话,就会找全局变量!!!)

age = 11
def func1():
    age =22
    print(age)
    def func2():
        age = 33
        print(age)
    func2()
func1()

>>>22
>>>33
age = 11
def func1():
    age =22
    print(age)
    def func2():

        print(age)
    func2()
func1()

>>>22
>>>22
age = 11
def func1():

    print(age)
    def func2():

        print(age)
    func2()
func1()

>>>11>>>11
age = 11
def func1():
    def func2():
        print(age)
    age = 22
    func2()
func1()

>>>22
age = 11
def func1():
    global age
    def func2():
        print(age)
    func2()
    age = 22  # 此处修改了全局函数!!!
func1()
print(age)

>>>11
>>>22  
age = 11
def func1():
    global age
    def func2():
        print(age)
    age = 22  # 修改了全局变量
    func2()
func1()
print(age)

>>>22
>>>22

 

分类:

技术点:

相关文章:

  • 2021-08-30
  • 2021-05-24
  • 2021-11-05
  • 2021-11-15
  • 2021-08-07
  • 2021-08-06
  • 2021-08-30
  • 2021-10-19
猜你喜欢
  • 2021-08-30
  • 2021-12-08
  • 2021-08-30
  • 2021-08-30
  • 2021-08-30
  • 2021-11-01
  • 2021-11-15
相关资源
相似解决方案