​

函数的调用、定义、参数

​编辑

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

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. Easy-Classification-验证码识别

    1.背景 Easy-Classification是一个应用于分类任务的深度学习框架,它集成了众多成熟的分类神经网络模型,可帮助使用者简单快速的构建分类训练任务.   案例源代码 Easy-Classi ...

  2. vscode,java中文乱码

    1.vscode默认是utf-8,但最好再打开自动检测 2.在vscode设置里搜 auto guess,启用auto guess encoding 3.windows默认的是gbk,在windows ...

  3. 万字 HashMap 详解,基础(优雅)永不过时

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 前言 大家好,我是小彭. 在上一篇文章里,我们聊到了散列表的整体设计思想,在后续几篇文章里,我们将以 Jav ...

  4. Selenium4+Python3系列(十) - Page Object设计模式

    前言 Page Object(PO)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一.在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一定的 ...

  5. Azure DevOps 中自定义控件的开发

    Azure DevOps 插件: Field Unique Control https://github.com/smallidea/azure-devops-extension-custom-con ...

  6. 使用 Visual Studio 2022 调试Dapr 应用程序

    使用Dapr 编写的是一个多进程的程序,使用Visual Studio 调试起来可能会比较困难,因为 Visual Studio 默认只会把你当前设置的启动项目的启动调试. 好在有Visual Stu ...

  7. Mattermost 笔记

    目录 部署 配置 客户端 桌面程序 Android 使用 扩展 Jenkins Hubot 机器人 Jira GitHub Mattermost 是一个开源.可私有化部署的在线通讯平台,可以和Gith ...

  8. 外包公司中的"炼狱",极度摧残,避免踩坑。

    引言 前些天羊了,一直没有更新.今天给大家聊聊两家外包公司,遇到的小伙伴避免踩坑. 咱不说那些虚的,什么尽量不要去外包公司,尽可能找甲方,这些谁都知道,肯定是因为一些原因(比如学历.项目经验.技术有待 ...

  9. [Leetcode]设计链表

    题目 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链表,则还需要一 ...

  10. 线性构造treap

    数据结构 线性构造treap treap的线性构造可以使复杂度锐减到\(O(n)\),很优秀 treap的本质就是小根堆+二叉搜索树,即保证val满足搜索树的同时,维护rad的小根堆. 现在我们先把数 ...