首页 > 编程语言 >02:python-函数

02:python-函数

时间:2023-04-06 20:33:29浏览次数:48  
标签:02 函数 python 关键字 参数 print kw def

    

 

正文

# 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

相关文章

  • 题目 1023: [编程入门]选择排序
    找出数组无序区中的最小值(最大值),与无序区中第一个数(最后一个数)交换。例子:52314第一轮无序区最小值是1,将1和无序区中一个数交换:12354。有序区:1,无序区:2354第二轮无序区最小值是2,因为2就是无序区的第一个数,所以不用交换:12354。有序区:12,无序区:354第三轮无序......
  • 函数-流程函数
    常见的流程函数:  代码:selectif(true,'OK','Error');/*如果第一个值为true,则返回OK,否则返回Error*/selectIFNULL(null,'default');/*如果第一个值为null,则返回default,否则返回第一个值*/--查询emp表成员员工的姓名和工作地址(如果是北京/上海,则返回一线城市,否则返回二线......
  • vue之箭头函数
    目录说明解决方法一重新定义this解决方法二使用箭头函数无参数的箭头函数有一个参数的箭头函数有两个参数的箭头函数有一个参数一个返回值的箭头函数说明当在一个方法(函数)里面再定义一个方法(函数)时,内部的方法的this指向会有问题,如下:<body><divid="app"><h1>{{l1......
  • Python小练习:权重初始化(Weight Initialization)
    Python小练习:权重初始化(WeightInitialization)作者:凯鲁嘎吉-博客园 http://www.cnblogs.com/kailugaji/调用Pytorch中的torch.nn.init.xxx实现对模型权重与偏置初始化。1.weight_init_test.py1#-*-coding:utf-8-*-2#Author:凯鲁嘎吉CoralGajic3#https://w......
  • JavaWeb-Cookie-16课-2023-04-06
    packagecom.feijian.servlet;importjavax.servlet.ServletException;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOExc......
  • 【转】python pip 换源阿里云
    via:pythonpip换源阿里云-知乎(zhihu.com)pip换源阿里云只需要在cmd输入一条命令:pipconfigsetglobal.index-urlhttps://mirrors.aliyun.com/pypi/simple ......
  • 总结20230406
    今天周四,又是一周内最轻松的一天。今天羽毛球课主要是打比赛,目前比赛第一轮已结束,目前战绩是三胜三负,可惜说有两场输的确实不应该。再接再厉,迎接接下来的比赛。今天要复习蓝桥杯的,确实该复习了,还有一天。 ......
  • 配电网分布式电源和储能选址定容 以配电网总成本最低为目标函数,其中包括年运行成本
    配电网分布式电源和储能选址定容以配电网总成本最低为目标函数,其中包括年运行成本,设备维护折损成本、环境成本;以系统潮流运行为约束条件,采用粒子群算法求解,实现光伏、风电、储能设备的规划。YID:4980674139963843......
  • 2023年快消行业企业CRM数字化转型服务商调研与案例解析
    近年来,“数字化转型是公司最重要的战略方向之一”已成为消费品零售企业的共识。越来越多企业开始更主动、更广泛深入地利用数字化、智能化的手段来“修炼内功”,以降低外部环境的影响,并通过技术创新、模式创新、业态创新等技术手段,不断夯实核心业务竞争力,从而将挑战转化成机遇。 ......
  • 函数-日期函数
    常见的日期函数:  代码:selectcurdate();/*返回当前日期*/selectcurtime();/*返回当前时间*/selectnow();/*返回当前日期+时间*/selectyear(now());/*返回当前日期中的年份*/selectmonth(now());/*返回当前日期中的月份*/selectday(now());/*返回当前日期中的日份......