python进阶语法,函数的基本使用

#函数定义:
#格式:def函数标识符(参数列表):

#定义无参函数
def say_hello():
    print("hello world!")
    print("hello everyone!")

#定义有参函数
def mymax(a, b):
    if a > b:
        print("最大值是", a)
    else:
        print("最大值是", b)

#函数调用
#格式:函数名(实际参数列表)
#函数调用时需要注意实参要和形参数量一致
say_hello()
mymax(3, 2)

#return[结果]:[]中的结果可以省略
#1.在函数的内部,用来结束当前函数的执行,并将结果返回给调用者
#2.如果return,结果被省略,则默认返回return none
#3.如果函数中没有return语句,相当与在函数最后执行了return none
#4.如果函数中return了结果,该结果要返回给调用者,一般需要一个变量来接受结果
#5.函数中最多一个return被执行
def myadd(x,y):
    print("sum:",x + y)
    return x + y

#代码不会被执行
#print
sum1=myadd(2,3)
print(sum1)

#不可变类型参数
#做的是值传递
def change(a):
    print(id(a))

a=10
change(a)
a=1
change(a)

def change1(a):
    a+=1
    print(id(a))

a=10
change1(a)

#可变类型参数
#引用传递
def change2(mylist):
    mylist.append(10)
    print(mylist)
mylist=[1,2,3]
change2(mylist)
print(mylist)
#位置形参
#实参位置要和形参位置一致,输出结果要完整
def add(a,b):
    return a+b

result = add(3,5)
print(result)
#result = add(3)
#print(result)

#缺省参数(默认参数)
#在定义函数时,给形参进行默认赋值化(形参初始化)默认参数建议使用不可变类型
#当函数调用没有给默认参数传实参,则使用默认参数初始化的值,如果传了实参使用实参值
#默认参数要在位置参数之后定义
def myadd(a,b,c=0,d=0):
    return a+b+c+d
print((myadd(1,2,)))
print(myadd(1,2,3,4))

#def myadd(a,c=0,d=0,b):
#    return a+b+c+d


#星号元组形参
#格式:*变量名
#意义:星号元组形参可以接受任意数据量的位置参数,并封装为一个元组
def prnt(*args):
    print(*args)
prnt(1)
prnt(1,2,3,4)

def myadd(a,b,*args):
    sum = a+b
    for i in args:
        sum += i
    return sum
print(myadd(1,2,3,4))

#命名关键字参数:
#要在*或者*args之后出现
#在函数调用时,参数传递组要以赋值方式进行传递
#*分隔符,用来分隔位置参数和关键字参数
#如果命名关键字参数在定义时指定了默认值(即缺省参数),则调用时可以不传递实参,函数会使用默认值。
#如果命名关键字参数在定义时没有指定默认值,则调用时必须传递实参,否则会抛出 `TypeError`。
def func1(*,a,b):
    print(a,b)
func1(a=1,b=2)

def func2(*args,a=0,b=0):
    print(a,b)
func2(1,a=1,b=2)
#双星号字典参数
#格式:**kwargs
#可以接收任意数量的关键字参数,并打包成一个字典
#**kwargs在函数中最多出现一次,用来收集多余参数
#**kwsrgs一般放在最后
def func3(**kwargs):
    print(kwargs)
func3(a=1,b=2)

def func4(a,b,c):
    print(a,b,c)
#解包
#如果函数调用值提供的数据是元组或列表,可以用*解包
#如果数据是字典,可以使用**解包
t=(1,2,3)
func4(*t)

d={'a':1,'b':2,'c':3}
func4(**d)

#result返回多个值
def func5(x):
    return x**2,x%2
x,y=func5(5)
print(x,y)

def add(a,b):
    return a+b
result = add(1,2)
print(result)

#匿名函数:lamba函数的参数列表:函数体代码的表达式
func= lambda a,b:a+b
print(func(1,2))

#全局变量:在函数外部、python文件自定义的变量
#函数内部可以直接访问局部变量,但是不能直接修改全局变量
#a=1

#局部变量:是定义在函数内部的变量,局部变量在函数调用时创建,在函数调用完成后自动释放
#局部变量例子
def add(a,b):
    return a+b
result = add(1,2)
print(result)
#print(a,b)

#全局变量例子
#函数内部可以访问全局变量
a=1
def func(b,c):
    return b,c
result = func(1,2)
print(result)
print(a)

#函数内部不能直接修改全局变量
#def func2():
#    a+=1

'''def func():
    print('func')
def func2():
    print('func2')
def execute():
    print('execute')
    func()
    func2()
execute()'''


#如果python文件中定义了两个重名的函数,后面的函数会覆盖前面的
def func():
    print('func')
def execute():
    print('execute')
    def func():
        print('local func')
    func()
def func():
    print('new func')
execute()
func()

#嵌套函数可以封装函数内部的实际逻辑
#函数调用会优先调用嵌套的内部函数,而不是外部
def func3():
    print('out func3')

def execute2():
    print('execute2')
    def func4():
        print('inner func4')
    func4()
execute2()

def execute3():
    name='zhangsan'
#当在内部函数中使用变量时,如果在局部作用域中找不到,则到上层作用域中找。
    def func5():
        print('outer func5')
    func5()
execute3()

#嵌套函数中,外部函数不能直接使用内部函数使用的变量
#内部函数可以访问外部函数的变量和参数
def outer():
    x=10
    def inner():
        y=20
        print(x,y)
    inner()
#    print(y)
outer()

def outer2():
    name='zhangsan'
    def inner2():
        print(name)
    #返回的是函数,不是函数调用
    return inner2
#接收的是函数本身
inner2=outer2()
#加上()才是函数调用
inner2()

你可能感兴趣的:(python,java,服务器)