正文
# 1:调用内置函数 # 调用绝对值函数 abs() intAbs = abs(-20) print(intAbs) # 调用最大函数 intMax = max(1, 2, -1, 10) print(intMax) # 数据类型转换 print(int('124')) # 字符串转int print(int(12.34)) # float转int print(str(12.34)) # float转字符串 print(str(12)) # int转字符串 print('\n\n---2:定义函数 用def关键字---') # 2:定义函数 用def关键字 # 在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。 # python的返回值没有在声明的时候指出 ''' 函数:小结 定义函数时,需要确定函数名和参数个数; 如果有必要,可以先对参数的数据类型做检查; 函数体内部可以用return随时返回函数结果; 函数执行完毕也没有return语句时,自动return None。 函数可以同时返回多个值,但其实就是一个tuple。 ''' # 声明:自定义绝对值函数 def my_abs(x): if not isinstance(x, (int, float())): raise TypeError('bad operand type') if x >= 0: return x else: return -x # 调用 intx = my_abs(-11) print(intx) # 3:函数的参数 # 默认参数 def enroll(name, gender, age=6, city='Beijing'): print('name:', name) print('gender:', gender) print('age:', age) print('city:', city) enroll('张三', 'F', 6, '北京') enroll('lisi', '女') enroll('yiyi', '男', city = '上海') enroll('Bob', 'M', 7) # 可变参数 把参数组装个数组 之后在数组前面加一个* # 字符串拼接 def conAddArguments(*list): aStr = '' for str in list: aStr = '{}===={}'.format(aStr, str) return aStr nameList = ['yiyi', 'yiyan', 'yixian'] # *nameList表示把nameList这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。 allStr = conAddArguments(*nameList) print(allStr) # 关键字参数 # 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。 # 而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。 # kw是key:value的键值对 def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) person('张三', 10) person('lisi', 10, city='zhengzhou', sex='nan') # 关键字参数核心写法 # **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict, # 注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。 extra = {'city': 'Beijing', 'job': 'Engineer'} person('Jack', 24, **extra) # 参数组合 # a,b是普通参数 c是默认参数 *args是可变参数 **kw是关键字参数 def f1(a, b, c=0, *args, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) # a,b是普通参数 c是默认参数 d是命名关键字参数 **kw是关键字参数 def f2(a, b, c=0, *, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw) # 所以,对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。 args1 = (1, 2, 3, 4) kw1 = {'d': 99, 'x': '#'} f1(*args1, **kw1) args2 = (1, 2, 3) kw2 = {'d': 88, 'x': '#'} f2(*args2, **kw2) ''' 小结 Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。 默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误! 要注意定义可变参数和关键字参数的语法: *args是可变参数,args接收的是一个tuple; **kw是关键字参数,kw接收的是一个dict。 以及调用函数时如何传入可变参数和关键字参数的语法: 可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3)); 关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。 使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。 命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。 定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。 ''' # 递归函数 # 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 # 使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。 # 阶乘 def fact(n): if n == 1: return 1 return n * fact(n-1) factValue = fact(5) print(factValue)
标签:02,函数,python,关键字,参数,print,kw,def From: https://www.cnblogs.com/zyzmlc/p/17294068.html