函数的调用、定义、参数

​编辑

#######命名关键字参数没完

abs()函数:绝对值

>>> abs(100)
100
>>> abs(-20)
20

max()函数:接收任意多个参数,并返回最大的那个

>>> max(1, 2)
2
>>> max(2, 3, 1, -5)
3

数据类型转换函数:

int():整数

float():浮点型

str():字符型

bool():布尔型

定义函数

def my_abs(x):
if x >= 0:
return x
else:
return -x

执行到return时,函数就执行完毕,并将结果返回

如果已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名):

空函数

如果想定义一个什么也不做的空函数,可以用pass语句:

def nop():
pass

pass 用来作为占位符,比如没想好写什么函数代码,可以先放个pass让整体代码正常运行

pass也可以用在其他语句

if age >= 18:
pass

这句缺少pass,代码就会有语法错误

返回多个值

比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的坐标:

import math  #表示导入math包,并允许后续代码引用包里的sin、cos等函数

def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny

python多值返回就是返回一个tuple

​编辑

函数参数

位置参数

计算<span class="cke_reset cke_widget_drag_handler_container"><img src="https://img2023.cnblogs.com/blog/1975815/202302/1975815-20230219151815511-72735130.gif" width="15" height="15" class="cke_reset cke_widget_drag_handler" title="点击并拖拽以移动" data-cke-widget-drag-handler="1" data-mce-src="https://img2023.cnblogs.com/blog/1975815/202302/1975815-20230219151815511-72735130.gif"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸">​<span class="cke_widget_edit_container" title="编辑图片">编辑的函数:

def power(x):
return(x*x)

计算<span class="cke_reset cke_widget_drag_handler_container"><img src="https://img2023.cnblogs.com/blog/1975815/202302/1975815-20230219151815511-72735130.gif" width="15" height="15" class="cke_reset cke_widget_drag_handler" title="点击并拖拽以移动" data-cke-widget-drag-handler="1" data-mce-src="https://img2023.cnblogs.com/blog/1975815/202302/1975815-20230219151815511-72735130.gif"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸">​<span class="cke_widget_edit_container" title="编辑图片">编辑的函数:

def power(x, n):
s = 1
while n > 0:
s = s * x
n = n - 1
return x

x和n都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数x和n

把第二个参数n的默认值设定为2:

def power(x, n = 2):
s = 1
while n > 0:
s = s * x
n = n - 1
return x

此时,power(5)和power(5,2)等价

若n>2,就必须明确地传入n,比如power(5,3)

注意:

必选参数在前,默认参数在后,否则Python的解释器会报错(容易产生歧义)

当函数有多个参数时,把变化大的参数放在前面,默认参数放在后面(降低调用函数的难度)

如:

def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)

大多数学生注册时不需要提供年龄和城市,只提供必须地两个参数即可

enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')

​编辑

可变参数

传入的参数个数是可以变的

如:给一组数字,计算平方和(作为一个list或tuple传进来)

def calc(numbers):
sum = 0
for n in nmumbers:
sum = sum + n * n
return sum

若函数参数为可变参数:

def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum

定义可变参数和定义一个list或tuple参数相比,只是在参数前面加一个 * 号,参数numbers接收到的是一个tuple。调用该函数时,可以传入任意个参数,包括0个参数

 关键参数:

关键字参数允许你传入0个或任意个含参数名的参数:

def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)

也可以传入任意个数的关键字参数:

>>> person('Michael', 30)
name: Michael age: 30 other: {}
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

关键参数可以扩展函数功能。比如,person函数name和age两个参数是必选项,但如果提供更多的参数就需要利用关键字参数

可以把字典转换为关键字参数传进去:

>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

​​

>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, city=extra['city'], job=extra['job'])
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

跟着廖雪峰学python 005的更多相关文章

  1. 跟着廖雪峰学python 003

    ​ ​编辑 列表和元组 list 是一种有序.可变的数据类型,可添加删除其中的元素. len()函数:可以获取列表元素的个数 classmates = ['Micheal' , 'Bob' , 'Ja ...

  2. 跟着老王学Python

    亲爱的朋友:     欢迎你!很高兴能在这里见到你,你能来到这里说明你真的很喜欢python,很想把python给学好!我觉的你很幸运,开始我学python的时候比较少资料,学起来也比较头疼,现在随着 ...

  3. 廖雪峰老师Python教程读后笔记

    廖老师网站:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 花几天时间看了廖老师的 ...

  4. 跟着高淇学Python——第一到第三章总结

    2019/10/26 第一章:Python介绍 Python是一种解释型,面向对象的语言.特点是: 可读性强 简洁,简洁 面向对象 免费开源 可移植性和跨平台性 丰富的库 可扩展性 应用范围:1.人工 ...

  5. 进程 vs. 线程(python的协程)(转廖雪峰老师python教程)

    我们介绍了多进程和多线程,这是实现多任务最常用的两种方式.现在,我们来讨论一下这两种方式的优缺点. 首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Work ...

  6. python 协程(单线程中的异步调用)(转廖雪峰老师python教程)

    协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在 ...

  7. 【廖雪峰老师python教程】——进程与线程

    多进程 操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去.表面上看,每个任务都是交替执行的,但是,由于CPU ...

  8. 【廖雪峰老师python教程】——IO编程

    同步IO 异步IO 最常见的IO——读写文件 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一 ...

  9. 【廖雪峰老师python教程】——错误和调试

    错误处理 try...except...finally...机制 try: print('try...') r = 10 / 0 print('result:', r) except ZeroDivi ...

  10. 【廖雪峰老师python教程】——OOP

    概述 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 数据封装.继承和多态 ...

随机推荐

  1. Pthread 并发编程(三)——深入理解线程取消机制

    Pthread 并发编程(三)--深入理解线程取消机制 基本介绍 线程取消机制是 pthread 给我们提供的一种用于取消线程执行的一种机制,这种机制是在线程内部实现的,仅仅能够在共享内存的多线程程序 ...

  2. 【Java并发002】使用级别:线程同步与线程通信

    一.前言 本文介绍Java多线程技术,分为五个部分:多线程的两种实现方式--继承Thread类和实现Runnable接口:线程同步应用:三人吃苹果:线程同步+线程通信应用之一:生产者-消费者问题:线程 ...

  3. 1759E(方案枚举)

    题目链接 题目大意: 给你n个数(n个宇航员对应的能量值) 一个h ,h表示机器人当前的能量值.机器人拥有2中绿色的药剂,一瓶蓝色的药剂.其中绿色的药剂可以使机器人的能量值变为现在的2倍(2-> ...

  4. 关于deepin-wine或wine设置PATH环境变量的方法

    前言 更改wine中PATH变量主要是为了能在 cmd输入一些命令而已,这里你可能会问怎么用cmd? deepin-wine cmd 这样就进入了cmd,而设置PATH 环境变量不能像windows一 ...

  5. 使用 Rainbond 搭建本地开发环境

    在开发之前,你需要在本地安装各种开发工具和服务,比如:Mysql.Redis.Nacos 等等,我们都知道在个人电脑上安装这些服务相当的繁琐,可能会遇到很多问题,环境问题.依赖问题等等. 在需要团队协 ...

  6. Android 内存缓存框架 LruCache 的实现原理,手写试试?

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 前言 大家好,我是小彭. 在之前的文章里,我们聊到了 LRU 缓存淘汰算法,并且分析 Java 标准库中支持 ...

  7. Java开发学习(四十六)----MyBatisPlus新增语句之id生成策略控制及其简化配置

    在前面有一篇博客:Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发,我们在新增的时候留了一个问题,就是新增成功后,主键ID是一个很长串的内容. 我们更想要的是按照 ...

  8. 如何使用Abstract类?抽象类的威力

    简介: 今天我想谈谈如何使用抽象类,以及抽象类真正的威力.本文将结合具体业务来说明如何使用抽象类. 业务简述: 本人目前只接触过PMS(物业管理系统),公司主要业务的是美国的租房业务.由于美国租房和中 ...

  9. 如何在SpringBoot中优雅地重试调用第三方API?

    前言 作为后端程序员,我们的日常工作就是调用一些第三方服务,将数据存入数据库,返回信息给前端.但你不能保证所有的事情一直都很顺利.像有些第三方API,偶尔会出现超时.此时,我们要重试几次,这取决于你的 ...

  10. 连接MySql时提示%d format: a number is required, not str

    代码: sql = "select * from appelementinfo" coon = pymysql.connect(user='root', password='', ...