本文共 3365 字,大约阅读时间需要 11 分钟。
函数是Python为代码最大程度重用和减少代码冗余而提供的基本结构。它的核心优势在于实现代码的高度复用性和可读性。Python支持两种主要编程范式:函数式编程和面向对象编程。
函数式编程的核心思想是将特定功能封装到函数中,便于后续重复调用。通过调用函数,可以避免代码的冗余,提升开发效率。
面向对象编程通过对函数进行封装和分类,将实例和类的行为结合,实现了代码的更高层次管理,使开发更加高效和便捷。
定义一个函数的语法格式为:
def 函数名(参数): # 函数体 return 返回值
调用函数时,需传入相应的参数。参数的传递方式分为位置参数、指定参数、默认参数和动态参数。
函数的返回值通过return关键字控制。若未使用return,函数默认返回None。注意,return语句执行后,后续代码不会执行。
def re(): if 1 == 1: return True else: return False# 调用返回结果print(re()) # 输出: True
参数按定义顺序传递。若函数定义为def ret(x):,则调用时需按顺序传入。
指定参数允许在调用时直接指定对应值的字段名。如:
def ret(a, b, c): print(a, "a") print(b, "b") print(c, "c")# 调用示例ret(b="bbb", a="aaa", c="ccc")
若函数定义时给参数指定默认值,调用时可省略该参数。默认参数必须放在参数列表最后。
def ret(x="Hello Word"): print(x)# 调用示例ret() # 输出: Hello Wordret("Pythoner") # 输出: Pythoner 动态参数用于接收任意数量的参数或键值对。
def ret(*args): print(args, type(args))ret(11, 22, 33) # 输出: (11, 22, 33)
def ret(**kwargs): print(kwargs, type(kwargs))ret(k1=123, k2=456) # 输出: {'k1': 123, 'k2': 456} def ret(*args, **kwargs): print(args, type(args)) print(kwargs, type(kwargs))ret(11, 222, 333, k1=111, k2=222)
参数解包允许将多个变量自动提取到函数参数中。
def f(a, b, c, d): print(a, b, c, d)args = (1, 2, 3, 4)f(*args)
全局变量在函数外定义,局部变量在函数内定义。若要修改全局变量,需使用global关键字。
n1 = 1def num(): nonlocal n1 n1 += 1num()print(n1) # 输出: 2
Lambda表达式是匿名函数,适用于简单的单行逻辑。
f = lambda x, y: x + yprint(f(1, 2)) # 输出: 3
简述普通参数、指定参数、默认参数、动态参数的区别。
计算传入字符串中数字、字母、空格及其他字符的个数。
def var(s): num_digit = 0 num_alpha = 0 num_space = 0 num_other = 0 for char in s: if char.isdigit(): num_digit += 1 elif char.isspace(): num_space += 1 elif char.isalpha(): num_alpha += 1 else: num_other += 1 return (num_alpha, num_space, num_digit, num_other)result = var("21323 asd*%^*^% &*213asdasdasda sdasdasd")print(result) 判断传入的字符串、列表、元组长度是否大于5。
def num(x): if len(x) > 5: return True else: return Falseret1 = num(["asd","asdasd","asdasd","asdasd"])ret2 = num("asdasdasd")print(ret1, ret2) 检查传入对象的每个元素是否含有空内容。
def num(x): for n in x: n = str(n) if n.isspace(): return False return Trueret1 = num(" ")ret2 = num("asdasd")ret3 = num(["asd","312",123," "])print(ret1, ret2, ret3) 检查传入列表长度,若大于2,保留前两个元素。
def num(x): if len(x) > 2: return x[:2] else: return ""print(num(["11","22","33"]), num(["33"]))
提取传入列表或元组的奇数位元素。
def num(x): result = [] for i in range(len(x)): if i % 2 == 1: result.append(x[i]) return resultprint(num([11,22,33,44,55,66]))
检查传入字典的每个value长度,若大于2,保留前两个。
def dictt(x): for k in x: if isinstance(x[k], str): if len(x[k]) > 2: x[k] = x[k][:2] elif isinstance(x[k], list): for i in x[k]: s = str(i) if len(s) > 2: idx = x[k].index(i) x[k].pop(idx) x[k].insert(idx, s[:2]) return xdic = {"k1": "v1v1", "k2": [1111,22,33,44]}print(dictt(dic)) 转载地址:http://icofk.baihongyu.com/