当前位置: 移动技术网 > IT编程>脚本编程>Python > Python学习笔记——Python 函数

Python学习笔记——Python 函数

2019年07月26日  | 移动技术网IT编程  | 我要评论

橡胶吸盘,符宝 笔趣阁,一世兽宠

1. 函数定义与调用

def myfirstfunction():
    print('这是我创建的第一个函数')
#调用
myfirstfunction()
这是我创建的第一个函数

2. 函数文档

def mysecondfunction(name):
    #下面这个字符串即为函数文档
    '函数定义过程中的name叫形参'
    print('你的名字是' + name)
mysecondfunction('nigream')
#两个双下划线表示系统属性
print(mysecondfunction.__doc__)
#也可以用
help(mysecondfunction)
你的名字是nigream
函数定义过程中的name叫形参
help on function mysecondfunction in module __main__:

mysecondfunction(name)
    函数定义过程中的name叫形参

3. 关键字参数

def saysome(name , words):
    print(name + '-->' + words)
saysome(name='nigream',words='hello')
nigream-->hello

4. 默认参数

def saysome(name = 'nigream', words = 'hello'):
    print(name + '-->' + words)
saysome()
saysome('苍井空')
saysome('苍井空' , '我脱光衣服躺在镜头前,是为了生存;而你衣冠楚楚地站在镜头前,却是为了私欲和欺骗!')
nigream-->hello
苍井空-->hello
苍井空-->我脱光衣服躺在镜头前,是为了生存;而你衣冠楚楚地站在镜头前,却是为了私欲和欺骗!

5. 收集参数

def test(*params):
    print('参数的长度是:',len(params))
    print('第三个参数是:',params[2])

test(1,2,3,4,'nigream',5)
参数的长度是: 6
第三个参数是: 3

6. 返回值

def back():
    return [1,'nigream',3.14]
print(back())
#运行结果
[1, 'nigream', 3.14]
def back1():
    return 1,'nigream',3.14
#这里被看成一个元组
print(back1())
[1, 'nigream', 3.14]
(1, 'nigream', 3.14)

7. 作用域

def discounts(price,rate):
    final_price = price * rate
    return final_price

old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('打折后的价格是:',new_price)
请输入原价:100
请输入折扣率:0.8
打折后的价格是: 80.0
def discounts(price,rate):
    final_price = price * rate
    return final_price

old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('打折后的价格是:',new_price)
print('这里试图打印局部变量final_price的值:',final_price)
请输入原价:100
请输入折扣率:0.8
打折后的价格是: 80.0
---------------------------------------------------------------------------

nameerror                                 traceback (most recent call last)

<ipython-input-9-bd414db96855> in <module>()
      7 new_price = discounts(old_price,rate)
      8 print('打折后的价格是:',new_price)
----> 9 print('这里试图打印局部变量final_price的值:',final_price)

nameerror: name 'final_price' is not defined
def discounts(price,rate):
    final_price = price * rate
    print('这里试图打印全局变量old_price的值:',old_price)
    return final_price

old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('打折后的价格是:',new_price)
请输入原价:100
请输入折扣率:0.8
这里试图打印局部变量old_price的值: 100.0
打折后的价格是: 80.0
def discounts(price,rate):
    final_price = price * rate
    #在这里python会重新定义一个名字相同的局部变量
    old_price = 50
    print('这里试图打印局部变量old_price的1值:',old_price)
    return final_price

old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('这里试图打印全局变量old_price的2值:',old_price)
print('打折后的价格是:',new_price)
请输入原价:100
请输入折扣率:0.8
这里试图打印局部变量old_price的1值: 50
这里试图打印全局变量old_price的2值: 100.0
打折后的价格是: 80.0

8. global

count = 5
def myfun():
    count = 10
    print(10)
myfun()
print(count)
10
5
#要在函数内部修改count
count = 5
def myfun():
    global count
    count = 10
    print(10)
myfun()
print(count)
10
10

9. 内嵌函数

def fun1():
    print('fun1正在被调用')
    def fun2():
        print('fun2正在被调用')
    fun2()
fun1()
fun1正在被调用
fun2正在被调用

10. 闭包

#如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量
#进行引用,那么内部函数就被认为是闭包(closure)。
def funx(x):
    def funy(y):
        return x*y
    return funy
i = funx(8)
print(type(i))

print(i(5))
print(funx(8)(5))
<class 'function'>
40
40
def fun1():
    x = 5
    def fun2():
        #这里由于外层作用域已经定义了x,
        #所以此时系统会重新定义局部变量x,
        #而又未次局部变量赋值,所以该x = x + 2会报错
        x *= x
        return x
    return fun2()

fun1()
---------------------------------------------------------------------------

unboundlocalerror                         traceback (most recent call last)

<ipython-input-32-d753abbbddb3> in <module>()
      9     return fun2()
     10 
---> 11 fun1()

<ipython-input-32-d753abbbddb3> in fun1()
      7         x *= x
      8         return x
----> 9     return fun2()
     10 
     11 fun1()

<ipython-input-32-d753abbbddb3> in fun2()
      5         #所以此时系统会重新定义局部变量x,
      6         #而又未次局部变量赋值,所以该x = x + 2会报错
----> 7         x *= x
      8         return x
      9     return fun2()

unboundlocalerror: local variable 'x' referenced before assignment
#python2解决,利用列表等容器
def fun1():
    #将其定义为列表
    x = [5]
    def fun2():
        x[0] *= x[0]
        return x[0]
    return fun2()

fun1()
25
#python3解决,利用关键字nonlocal
def fun1():
    x = 5
    def fun2():
        nonlocal x
        x *= x
        return x
    return fun2()

fun1()
25

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网