函数笔记

#函数:函数也是一个对象,函数就是可以用来保存一些可以执行的代码,并且在需要的时候对这些代码(语句)进行多次调用

#语法:def 函数名(形参1,形参2... ):回车 代码块

#定义一个函数

def fn():

print('第一个函数')

print('哈哈哈')

#函数中保存的代码块不会立即执行 你需要调用代码才会执行

print(fn)#  返回值是个16进制的内存地址

fn()#print input这些东西也和函数一样是对象,所以调用函数就是在函数名+括号,同print()一样

fn()#fn是函数对象 fn()是调用函数

fn()#一个函数是可以多次输出的

#函数的参数:定义一个函数 来求任意二个数的和

#函数的参数是在定义函数时可以在函数后面的括号定义不等的形参 多个形参我们可以用逗号隔开

def sum(a,b):

print(a + b)

sum(10,10)#实参:实际参数制定了形参 你在定义函数的时候必须传递实际参数,实际参数会赋值给对应的形参,你有几个形参就要传递几个实参

#函数形参的默认值:

def fn1(a,b,c=20 ):#这个c就是默认值

    print(a,b,c)

print(c)

#fn1(1,2,1)  #但是当我们传递实参的话 他会覆盖默认值,没有传递默认值会生效

fn1(1,2)

#位置参数

def fn2(a=5,b=10,c=20 ):#第一个实参赋值给第一个形参 第二个赋值给第二个以此类推

    print(a,b,c)

fn2(b =1,c =2,a =7)#关键字参数可以不按顺序传递实参

# print('111111',end='')#end其实就是关键字参数 位置参数和关键字参数也能混合使用

fn2(1,1,c =11111)

# fn2(c =1 ,3)#混合使用的时,必须把位置参数放在关键字参数的前面

#实参的类型

def fn3(a):

print(a)

b =False

b='python'

fn3(b)#传递实参时并不会检查你插地的类型

def fn4(a,b):

print(a + b)

# fn4(123,'456')#这是一个隐患,不同类型数据相加会报错

def fn5(a):

# a = 20

    a[0] =50

    print('a=',a,id(a))#在函数内部对形参进行重新赋值不会影响其他变量

c = [1,2,3]

fn5(c.copy())#此时 a和c指向的都是同一个对象

print('c=',c,id(c))

# #a= [50, 2, 3] 1875034792520

# c= [50, 2, 3] 1875034792520

#如果我希望a和c不互相影响可以使用copy进行浅复制

#总结:如果你传递的是一个可变对象的时候,你由不希望我在函数内部的操作影响到函数外部的

#时候 那么你就可以考虑传递一个副本

你可能感兴趣的:(函数笔记)