Python学习_自定义函数def

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 函数
# 1. def 函数名(形式参数):
#         函数体
#         return “123”
# 2. 执行函数
#     函数名(实际参数)
# 3. 有几个形参,就需要几个实参
# 4. 指定形参传入实参,可以不按照顺序传入
# 5. 默认参数,指定默认值,放在尾部
# 6. 动态参数
# 7. 为动态参数传入列表、字典
# 8. 全局变量和局部变量


# 定义函数 def关键字
def email():
    print("alex")
    return "123"


# Python 如果不写return,默认返回None
print(email())


# 带参数的def, p 为形式参数
def kuaidi(p, v):
    if p == "123":
        return True
    else:
        return False


# 123 为实际参数
ret = kuaidi(123, 456)

# 指定参数
ret = kuaidi(v="11", p="123")
if ret:
    print("ok")
else:
    print("no")


# 指定name的默认值,实参为空取默认值,不指定默认值必须传
# 默认参数必须放在后面
def drive(p, name="alex"):
    temp = name + "开车去东北"
    return temp


ret = drive(111)
print(ret)


# 动态参数一,在参数前面加*,实际为元组
def xx(*a):
    print(a, type(a))


xx(11, 22, [33, 44], {"k1": "v1"})


# 动态参数二,在参数前面加**,实际为字典
def xx(**a):
    print(a, type(a))


xx(k1=123, k2=456)


def dd(*a, **aa):
    print(a, type(a))
    print(aa, type(aa))


dd(11, 22, 33, k1=123, k2=456)


# 动态参数默认写法 def f1(*args,**kwargs)
def f1(*args):
    print(args, type(args))


li = [11, 22, 33, 44]
f1(li, 123)
# 实际参数不加*作为整体传入
f1(li)
# 实际参数加上*会循环传入
f1(*li)


def f2(**kwargs):
    print(kwargs, type(kwargs))


dic = {"k1": 123, "k2": 456}
# 实际参数不加**作为 值 传入
f2(key=dic)
# 实际参数加**作为 字典 传入
f2(**dic)

# global 修改全局变量
# 规则:全局变量都大写 ,局部变量都小写
PERSON = "alex"


def fun1():
    # 局部变量
    a = 123
    #    p = "eric"
    global PERSON
    PERSON = "eric"
    print(a)


def fun2():
    a = 456
    print(PERSON)
    print(a)


fun1()
fun2()

li = [1, 2, 3, 4]
print(len(li) - 1)
print(li[len(li) - 1])
# [:-1表示最后一个]
print(li[:-1])


def obj_len(arg):
    # 如果是字符串、元组、列表
    # isinstance() 判断类型
    r = isinstance(arg, list)
    if isinstance(arg, str) or isinstance(arg, list) or isinstance(arg, tuple):
        if len(arg) > 5:
            return True
        else:
            return False
    else:
        return None


print(obj_len(111))


# 一旦变量遇到等号,name = xxx
# 如果xxx是一个值,内存创建xxx,并将 name 指向 xxx 的内存地址
# 如果xxx是一个变量,内存并不会创建xxx,仅仅只是引用,表示 将 name 指向了 xxx 的内存地址
# python 里面参数传的都是引用
def func(args, *x):
    args.append(33)
    del args[0:1]


li = [11, 22]
func(li)
print(li)


# 引用实例
def func(args):
    # 将args引用从li指向123,原li不变
    args = 123


li = [11, 22, 33, 44]
func(li)
print(li)


# 在def里面执行删除的时候,需要注意引用的对象发生了变化
# 是否满足后续代码执行条件
def dell(arg):
    for i in range(len(arg)):
        print(i)
        print(arg)
        if i % 2 == 1:
            pass
        else:
            del arg[i]


li = [11, 22, 33, 44, 55]
# 这里会报错
# dell(li)
print(li)


def split2word(dic):
    for k, v in dic.items():
        print(k, v)
        if len(v) > 2:
            dic[k] = v[0:2]
    return dic


dic = {"k1": "alex", "k2": "guolei"}
print(split2word(dic))


def f1(a1, a2):
    return a1 + a2


f2 = lambda a1, a2: a1 + a2

print(f1(1, 2))
print(f2(1, 2))

seq = ("11", "22", "33")
ret = "_".join(seq)
print(ret)

猜你喜欢

转载自www.cnblogs.com/xiaojiulin/p/10571904.html