欢迎来到LYBLaoInB的博客
LYBLaoInB
LYBLaoInB
回首往事,不因虚度年华而悔恨,不因碌碌无为而愧疚

python第六篇----函数

1.定义方式

  def aa(arg):

    do...

2.调用

  aa(我是参数)

3.返回值

  return result

  但是如果一个函数没有定义返回值,但是你使用了一个变量取接受,会的到None

4.pass

  很多内置函数的最后一行有一个pass这行代码的意思就是说不做任何操作,用来防止语法错误,比如if a>0:pass

5.注释

  三引号后enter就会有类似java中方法注释,会有方法的参数,返回值,作用的说明

6.参数类型

  python中的参数类型是无法固定的,所以可以建议使用什么类型的参数,在参数后加:参数类型来做一个软约束

def calculate(a: int, b: int):
    """
        求两个数字和
       @return: 返回和
       @param a:
       @param b:
       """
    return a+b

  但是这里的a,b还是没有强制使用int如果使用了两个字符串或者其他类型的也不会报错

  就是会有个黄线警告  Expected type 'int', got 'str' instead

7.全局变量和局部变量

  python中很有意思,定义的全局变量如果在函数内又定义了一个一样名字的,两者是没有关系的。如果想要在函数内部使用全局变量,需要用global关键字 global arg0把他变的局部可用才能进行修改,当然,agr0依然是一个全局变量

  在python中,只有函数可以区分作用域,也就是说不在函数里面定义的都是局部变量

name="aa"
def calculate(a: int, b: int):
    """
        求两个数字和
       @return: 返回和
       @param a:
       @param b:
       """
    name="bb"
    print("全局变量:{},局部变量:{}".format(globals(),locals()))
    return a+b
calculate("1","2")

-------------------------------------------------------------
全局变量:{。。有一些内置的删了。。'name': 'aa', 'calculate': <function calculate at 0x02FE5148>},局部变量:{'a': '1', 'b': '2', 'name': 'bb'}

  可以看到,函数内部定义的同名的也还是局部变量,而全局变量里面的name是不被影响的

8.python中可以返回多个值

def calculate(a: int, b: int):
    return a+b,a-b,a*b,a/b

result=calculate(1,2)

print("计算结果如下,和:{},差:{},积:{},商:{}".format(result[0],result[1],result[2],result[3]))
print(type(result))
------------------------------------------------------------------- 
计算结果如下,和:3,差:-1,积:2,商:0.5
<class 'tuple'>

  这样返回的值其本质是一个元组

9.python中参数还可以设置默认值,也叫缺省参数

  缺省参数必须放在最后面,并且如果有不定项参数*arg这种的,也要放在最后面

  def calculate(a: int, b: int,c="abc"):

  调用的时候,传入了就用传入的,没传入就abc

10.多参数  *参数名

  这里多出来的参数会以元组的形式保存给c,和多个返回值差不多

  def calculate(a: int, b: int,*c):

    print(c)
    return a+b,a-b,a*b,a/b

result=calculate(1,2,"adc","apc")

print("计算结果如下,和:{},差:{},积:{},商:{}".format(result[0],result[1],result[2],result[3]))

-----------------------------------------------------
('adc', 'apc')
计算结果如下,和:3,差:-1,积:2,商:0.5

10.关键字参数**kwargs

  这个参数的意思是函数调用的时候可以用x=3,y=4来进行一个关键字参数的输入,且在函数内部用kwargs进行接收,保存为一个字典的形式{“x”:3,"y":4}

11.可变类型参数和不可变类型参数

  不可变数据类型有数字,元组,字符串,布尔类型属于不可变类型,如果参数是这些类型,那么在函数中的操作不会影响到这些数据本身的变化,需要用赋值语句来修改他们的值。

print("数字:")
def change_num(nums):
    nums=12
    print(nums)
a=1
change_num(a)
print(a)
print("元组:")
b=(1,2,3)
def change_tuple(nums):
    nums=nums+(2,3)
    print(nums)
change_tuple(b)
print(b)

print("列表:")
c=[1,2,3]
def change_list(nums):
    nums.append(4)
    print(nums)
change_list(c)
print(c)
----------------------------------------------
数字:
12
1
元组:
(1, 2, 3, 2, 3)
(1, 2, 3)
列表:
[1, 2, 3, 4]
[1, 2, 3, 4]

  其实python中的参数调用,传入的是参数对应的内存地址,对于不可变类型参数来说,如果在函数内部进行了修改,会重新划分一块新的值得内存地址给函数内的变量,就和调用时候的参数没有关系了,里面的操作都是对新的地址的操作了

  可变类型参数传入后,进行修改,内存地址不变,调用前和函数里都是对一个内存地址的操作,所以即使不进行赋值操作,依然可以进行修改

 

posted @ 2020-08-20 18:00  LiuYongbo  阅读(291)  评论(0)    收藏  举报
<--将网易云歌单中的id复制到上面的data-id中就可以了 http://music.163.com/playlist?id=3103841025&userid=1698529278 -->