Datawhale学习计划:python基础知识四

一,函数关键字请参考以下博客

https://blog.csdn.net/s1h2e3n4g5/article/details/76416257

二,函数的定义参数

def 函数名(参数列表):
函数体

1,缺省参数

def foo(a,b=8):
    print(a,b)

foo("leason")
foo("leason",88)

2,函数名传参数

def foo(a,b):
    print(a,b)

foo("hello",'world')
foo(b='world',a="hello")

3,可变长度参数

def foo(arg1,*tupleArg,**dictArg):
    print("arg1=",arg1)          #arg1=leason
    print("tupleArg=",tupleArg)  #()
    print("dictArg=",dictArg)    #[]
foo("leason")

4,接受不定长参数*args

# 接收不定长参数*args 
def fun_var_args(farg, *args):  
    print("arg:", farg)
    for value in args:  
        print("another arg:", value)

fun_var_args(1, 2, 3) # *args可以当作可容纳多个变量组成的list  

*args可以当作可容纳多个变量组成的list  

# 传收不定长参数*args
def fun_var_args_call(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)

args = [2, 3] #list

fun_var_args_call(1, *args)

5,传收不定长参数**kwargs

# 接收不定长参数**kwargs
def fun_var_kwargs(arg1, **kwargs):
    print("arg1:", arg1)
    for key in kwargs:
        print("%s: %s" % (key, kwargs[key]))


fun_var_kwargs(arg1=1, arg2=2, arg3=3) # **kwargs可以当作容纳多个key和value的dict

**kwargs可以当作容纳多个key和value的dict 

# 传收不定长参数**kwargs
def fun_var_args_call(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)

kwargs = {"arg3": 3, "arg2": 2} # dictionary

fun_var_args_call(1, **kwargs)

# 接收不定长参数**kwargs
def fun_var_kwargs(arg1, **kwargs):
    print("arg1:", arg1)
    print('kwargs=',kwargs)
    for key in kwargs:
        print("%s: %s" % (key, kwargs[key]))

kwargs = {"arg3": 3, "arg2": 2} # dictionary
fun_var_kwargs(arg1=1, **kwargs) # **kwargs可以当作容纳多个key和value的dict

6,匿名函数

add=lambda x,y:x+y
print(add(1,2))

a=[1,2,-1,3]
b=sorted(a,key=lambda x:abs(x))
print(a)
print(b)

三,函数的作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:

  • L (Local) 局部作用域
  • E (Enclosing) 闭包函数外的函数中
  • G (Global) 全局作用域
  • B (Built-in) 内置作用域(内置函数所在模块的范围)

以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

g_count = 0  # 全局作用域
def outer():
    o_count = 1  # 闭包函数外的函数中
    def inner():
        i_count = 2  # 局部作用域

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问,如下代码:

if True:
    msg = 'I am from Runoob'

print(msg)

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

total = 0  # 这是一个全局变量
# 可写函数说明
def sum(arg1, arg2):
    # 返回2个参数的和."
    total = arg1 + arg2  # total在这里是局部变量.
    print("函数内是局部变量 : ", total)
    return total
# 调用sum函数
sum(10, 20)
print("函数外是全局变量 : ", total)

global 和 nonlocal关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

以下实例修改全局变量 num

num = 1
def fun1():
    global num  # 需要使用 global 关键字声明
    print(num)
    num = 123
    print(num)
fun1()
print(num)

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()

四,函数返回值

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。

def sum(arg1, arg2):
    # 返回2个参数的和."
    total = arg1 + arg2
    print("函数内 : ", total)
    return total
# 调用sum函数
total = sum(10, 20)
print("函数外 : ", total)

猜你喜欢

转载自blog.csdn.net/fanzonghao/article/details/89072750