python入门3-函数

python入门1-环境准备

python入门2-变量、语句、运算符、列表、元组、字典

python入门3-函数

python入门4-面向对象

python入门5-numpy

python入门6-pandas

七、函数

函数格式:

def sub(x,y):
    return x-y
print sub(3,2)  控制台输出1

关键字参数,位置参数:

def test(x , y , z=10):  
    print x, y ,z
test(1,2,3)   控制台输出1,2,3
test(1,2)  控制台输出1,2,10

test(x=1,z=3,y=2)  控制台输出1,2,3

定义的时候,*  参数,将位置实参,装配成元组

def test(x, y, z, *args):
    print x, y, z, args
print test(1,2,3,4,5)   控制台输出1 2 3 (4, 5)

定义的时候, ** 参数,将关键字实参,装配成字典

def test(x, y, z, **keys):
    print x, y, z, keys
print test(1, 2, 3, a=4, b=5)  控制台输出1 2 3 {'a': 4, 'b': 5}

调用的时候,*可以将元组或列表,打散成位置参数

调用的时候,**可以将字典,打散成关键字参数

def test(x, y, z):
    print x, y, z

x = [1, 2, 3]
test(*x)    控制台输出1 2 3 

y = {"x":"1","y":"2","z":"3"}
test(**y)  控制台输出1 2 3 

i = [0 , 1 , 2]

强引用 test( i )      正常传参, 里面可以修改i

弱引用 test( list(i) )   里面修改不了i 

# 可变对象(list dict)
number = [1,2,3]
def getNum(number):
    number.append(4)
    print(number) # [1, 2, 3, 4]
getNum(number)
print(number) # [1, 2, 3, 4]

# 不可变对象(string tuple int float)
def PName(str):
    str+="aaa"
str = 'zhangsan'
PName(str)
print(str)
# zhangsan

变量作用域

i = 10  #全局变量
def visit_i():
    print i  #控制台输出10
def change_i():
    global i #默认不许修改全局变量,除非如此声明
    i += 1
    print i  #控制台输出11

函数不支持重载,同名方法会覆盖前面定义的方法

函数的嵌套

def test():
    def test1():
        print "hello"
    return test1  

a = test()
a()  # 相当于调用了test1()

函数的闭包(内层函数可以获得父层函数的参数)

def test0(x):
    def test1(y):
        print x + y
    return test1
c = 10
obj = test0(c)
c = 100
obj(20)  #控制台输出30

装饰器(相当于拦截器,常用于添加日志、权限判断)

无参数(是否需要写return res 取决于delete 是否return )

def log(myfunction):
    def wrap(*args,**kwargs):
        print "添加日志开始1"
        res = myfunction(*args,**kwargs)
        print "添加日志结束2"
        return res
    return wrap

@log
def delete():
    print "删除操作"

delete()
# 添加日志开始1
# 删除操作
# 添加日志结束2

有参数

def log(i):
    def wrap1(func):
        def wrap2(*args,**kwargs):
            print "日志开始"
            if i>0:
                print "拥有权限"
                func(*args, **kwargs)
            else:
                print "权限不够"

            print "日志结束"
        return  wrap2
    return wrap1

@log(1)
def delete():
    print "删除操作"

delete()
# 日志开始
# 拥有权限
# 删除操作
# 日志结束


迭代器

import itertools
x = range(1,10)
com1 = itertools.combinations(x , 3) #排列
for i in com1:
    print i
# (1, 2, 3)
# (1, 2, 4)
# (1, 2, 5)
# (1, 2, 6)
# (1, 2, 7)
# (1, 2, 8)
# (1, 2, 9)
# (1, 3, 4)
# (1, 3, 5)
# ......
# (6, 7, 8)
# (6, 7, 9)
# (6, 8, 9)
# (7, 8, 9)

com2 = itertools.permutations(x , 3) #组合
for i in com2:
    print i

y = ['a','b','c']
com3 = itertools.product(x , y) #笛卡尔积
for i in com3:
    print i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yfx000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值