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)