Python学习笔记 函数

#函数定义
#函数调用
#函数文档
#关键字参数
#默认参数
#收集参数
#返回多个返回值
#变量的作用域
#内嵌函数
#闭包
#lambda表达式

'''一个最简单的函数'''
def m_function():
    pass

#函数的调用
m_function()

'''带参数的函数'''
def m_func_para(name):
    print(name + ' 万岁万岁万万岁!')

m_func_para('cxy')

'''带返回值的函数'''
def add(num1, num2):
    return num1 + num2

print(add(3, 12))

'''函数文档'''
#方便调用者更好的了解该函数
def m_fun_doc():
    '这是一个函数文档\n \
    这是函数文档的第二行'
    '这个不再是函数文档,只有上面那个才是'
    print('函数文档好!')

#获取函数文档的方法
print(m_fun_doc.__doc__)
help(m_fun_doc)

'''函数的关键字参数'''
#一个普通的函数
def m_Say(people, words):
    print(people + ': ' + words)

#正确的调用
m_Say('Computer', 'Hello World')
#如果不小心写反了参数,输出内容就不对了
m_Say('Hello World','Computer')
#为了避免这种状况,可以这样调用函数,防止记不住参数顺序导致程序错误
m_Say(words = 'Hello World', people = 'Computer')

'''函数的默认参数'''
def m_Say_default(people = 'Jobs', words =
          'Life is brief, and then you die, you know?'):
    print(people + ': ' + words)
#当不给参数时,会传入默认参数
m_Say_default()
#当参数只给了一部分,如下面的,则会默认传入第一个参数里
m_Say_default('What?')

'''收集参数(可变参数)'''
def m_func_unknown(*params):
    print('参数的长度是:', len(params))
    print('第一个参数是:',params[0])

#调用方法
m_func_unknown(1,2,3,4,5,6)
#如果具有收集参数的函数还需要有其他固定的参数
#则固定参数必须要要用关键字参数的方式来传入
#否则会被认为是收集参数的一部分,比如
def m_func_unknown_test(*params, others):
    print('收集参数的长度是:', len(params))
    print('第一个收集参数是:',params[0])
    print('固定参数为:' ,others)

m_func_unknown_test(1,2,3,4,5,6, others = 'others')
#建议:包含收集参数的函数,其他参数推荐设置为默认参数

'''函数与过程'''
#python是没有过程的(如果没有用户定义的返回值,会返回一个None)
def hello():
    print('hello')

temp = hello()
print(temp) #会打印一个None
print(type(temp))   #<class 'NoneType'>

'''多个返回值的参数'''
def m_multi_return():
    return [1, 'Hello', 5.678]

print(m_multi_return())

'''函数变量的作用域'''
#全局变量和局部变量
#函数内部的变量(局部变量)在函数外部不可见
#如果在一个函数内部试图修改一个全局变量,
#则python会创建一个和全局变量同名的局部变量
#函数内部的修改只在新创建的局部变量上进行
#例如:
g = 1
def test4var():
    g = 2
    print(g)

test4var()
print(g)

#global关键字,在函数内部使用全局变量
def test4global():
    global g
    g = 2
    print(g)

test4global()
print(g)

'''内嵌函数'''
#在一个函数内部创建一个函数
def fun_p():
    print('fun_p is called')
    def fun_c():
        print('fun_c is called')
    fun_c()

fun_p()

#内部函数的作用域仅限所在函数内

'''闭包'''
def FunX(x):
    def FunY(y):
        return x * y
    return FunY

i = FunX(8)
print(type(i))  #i是一个‘函数’

#通常调用方法
print(i(5))
#闭包使用方法
print(FunX(8)(5))

#另一个例子
def Fun1():
    x = 5
    def Fun2():
        #声明x不是一个局部变量,就可以引用到外部的x了
        nonlocal x
        x *= x
        return x
    return Fun2()

print(Fun1())

'''lambda表达式'''
def m_func_l(x):
    return 2 * x

print(m_func_l(5))

#等同于:
f = lambda x : 2 * x

print(f(5))

#lambda 关键字之后,‘:’之前为参数,‘:’后为函数主体
#两个参数的lambda表达式
f = lambda x, y : x + y
print(f(1,2))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值