Pass算子python 函数
Pass算子python 函数
函数
- 函数是代码的一种组织形式
- 函数应该能完成一项特定的工作,而且一般一个函数只完成一项工作
- 有些语言,分函数和过程两个概念,通俗解释是,有返回结果的是函数,无返回结果的叫过程,python不加以区分
- 函数的使用
- 函数使用需要先定义
- 使用函数,俗称调用
- 参数:负责给函数传递一些必要的数据或者信息
- 形参(形式参数):在函数定义的时候用到的参数,没有具体值,只是一个占位符号
- 实参(实际参数):在调用函数的时候输入的值
- 返回值:调用函数的时候的一个执行结果
- 使用return返回结果
- 如果没有值需要返回,我们推荐使用return None表示函数结束
- 函数一旦执行return,则函数立即结束
- 如果函数没有return关键字,则函数默认返回None
- 参考资料
- python参考资料:headfirst python -> 零基础入门学习python(小甲鱼)、流畅的python -> 习题
- 参数分类
- 普通参数/位置参数
- 默认参数
- 关键字参数
- 收集参数
- 普通参数
- c参见上例
- 定义的时候直接定义变量名
- 调用的时候直接把变量或者值放入指定位置
- 默认参数
- 形参带有默认值
- 调用的时候,如果没有对相应形参赋值,则使用默认值
- 关键字参数
- 语法
- 比较麻烦,但也有好处:
- 不容易混淆,一般实参和形参只是按照位置一一对应即可,容易出错
- 使用关键字参数,可以不考虑参数位置
- 收集参数
- 把没有位置,不能和定义是的参数位置相对应的参数,放入一个特定的数据结构中
- 语法
- 参数名args不是必须这么写,但是,推荐直接用args,约定俗成
- 参数名args前需要有星号
- 收集参数可以和其他参数共存
- 把关键字参数按字典格式存入收集参数
- 语法:
- kwargs一般约定俗成
- 调用的时候,把多余的关键字参数放入kwargs
- 访问kwargs需要按字典格式访问
- 收集参数,关键字参数,普通参数可以混合使用
- 使用规则就是。普通参数和关键字参数优先
- 定义的时候一般找普通参数,关键字参数,收集参数tuple,收集参数dict
- 把参数放入List或者字典中,直接把List/dict中的值放入收集参数中
- 语法:参考案例
- 对dict类型进行解包
- 需要用两个星号进行解包
- 函数的文档的作用是对当前函数提供使用相关的参考信息
- 文档的写法:
- 在函数内部开始的第一行使用三引号字符串定义符
- 一般具有特定格式
- 参考案例
- 文档查看
- 使用help函数,形如 help(func)
- 使用__doc__,查看案例
- # 定义一个函数
- # 只是定义的话不会执行
- # 1. def关键字,后跟一个空格
- # 2. 函数名,自己定义,起名需要遵循便令命名规则,约定俗成,大驼峰命名只给类用
- # 3. 后面括号和冒号不能省,括号内可以有参数
- # 4. 函数内所有代码缩进
- def
func():
print("我是一个函数")
print("爱生活")
- print("函数结束了")
函数结束了
- # 函数的调用
- # 直接写出函数名字,后面小括号不能省略,括号内内容根据情况
func
()
我是一个函数
爱生活
- # 函数定义
- def
func():
print('A')
print('B')
func
()
- A
- B
函数的参数和返回值
- # 形参和实参的案例
- # 参数person只是一个符号
- # 调用的时候用另一个
- def
hello(
person
):
print("{},你好吗?".format(
person
))
return
None
p
="小明"
- # 调用函数,需要把p作为实参传入
hello
(p
)
小明,你好吗?
p
="小五"
hello
(p
)
小五,你好吗?
pp
=hello
("小柒")
- print(
pp
)
小柒,你好吗?
None
- # return案例
- def
hello(
person
):
print("{0},你好吗?".format(
person
))
return
"提前结束!"
print(1)
p
="小明"
rst
=hello
(p
)
- print(
rst
)
小明,你好吗?
提前结束!
- # help负责随时为你提供帮助
- help(None)
# 等价于help(peint())
Help on built
-infunction
module builtins
:
- print(...)
print(
value
,...,
sep
=' ',end
='\n',file
=sys
.stdout
,flush
=False
)
Prints the values to a stream
,or to sys
.stdout by
default.
Optional keyword arguments
:
file
:a file
-like
object(
stream
);defaults to the current sys
.stdout
.
sep
:string inserted between values
,default
a space
.
end
:string appended after the last value
,default
a newline
.
flush
:whether to forcibly flush the stream
.
- # 九九乘法表
- # version 1.0
- for
o
inrange(1,
10):
# 控制外循环 从 1 到 9
for
i
inrange(1,
o
+1):
# 内循环,每次从第一个数字开始,打印到跟行数相同的数量
print(
o
*i
,end
=" ")
print()
- 1
- 2
4
- 3
6
9
- 4
8
12
16
- 5
10
15
20
25
- 6
12
18
24
30
36
- 7
14
21
28
35
42
49
- 8
16
24
32
40
48
56
64
- 9
18
27
36
45
54
63
72
81
- help(print)
Help on built
-infunction
module builtins
:
- print(...)
print(
value
,...,
sep
=' ',end
='\n',file
=sys
.stdout
,flush
=False
)
Prints the values to a stream
,or to sys
.stdout by
default.
Optional keyword arguments
:
file
:a file
-like
object(
stream
);defaults to the current sys
.stdout
.
sep
:string inserted between values
,default
a space
.
end
:string appended after the last value
,default
a newline
.
flush
:whether to forcibly flush the stream
.
- # 尝试用函数来打印九九乘法表
- def
jiujiu():
for
o
inrange(1,
10):
# 控制外循环 从 1 到 9
for
i
inrange(1,
o
+1):
# 内循环,每次从第一个数字开始,打印到跟行数相同的数量
print(
o
*i
,end
=" ")
print()
return
None
jiujiu
()
jiujiu
()
- 1
- 2
4
- 3
6
9
- 4
8
12
16
- 5
10
15
20
25
- 6
12
18
24
30
36
- 7
14
21
28
35
42
49
- 8
16
24
32
40
48
56
64
- 9
18
27
36
45
54
63
72
81
- 1
- 2
4
- 3
6
9
- 4
8
12
16
- 5
10
15
20
25
- 6
12
18
24
30
36
- 7
14
21
28
35
42
49
- 8
16
24
32
40
48
56
64
- 9
18
27
36
45
54
63
72
81
- # 改造上面函数
- def
printLine(
line_num
):
'''
- line_num;代表行号
- 打印一行九九乘法表
- '''
for
i
inrange(1,
line_num
+1):
print(
line_num
*i
,end
=" ")
print()
- def
jiujiu():
for
o
inrange(1,
10):
# 控制外循环 从 1 到 9
printLine
(o
)
return
None
jiujiu
()
- 1
- 2
4
- 3
6
9
- 4
8
12
16
- 5
10
15
20
25
- 6
12
18
24
30
36
- 7
14
21
28
35
42
49
- 8
16
24
32
40
48
56
64
- 9
18
27
36
45
54
63
72
81
参数详解
o
def
函数名(参数
1,参数
2,
.....)
:
o
函数体
o
o
#
调用
o
函数名(value1,value2,
......)
o
o
#
调用的时候,具体值参考的是位置,按位置赋值
o
def
func_name(p1
=v1
,p2
=v2
,........):
o
func_block
o
#
调用
1
o
func_name()
o
o
#
调用
2
o
value1
=100
o
value2
=200
o
func_name(
value1
,value2
)
o
def
func(p1
=v1
,p2
=v2
....):
o
func_body
o
o
被调函数
;
o
func(
p1
=value1
,p2
=value2
....)
·
def
func(*args
):
·
func_bady
·
按照List使用方式访问args得到传入的参数
·
·
调用:
·
func(
p1
,p2
,p3
....)
- # 普通参数案例
- def
normal_para(
one
,two
,three
):
print(
one
+two
)
return
None
normal_para
(1,2,3)
- 3
- # 默认参数案例1
- def
default_para(
one
,two
,three
=100):
print(
one
+two
)
print(
three
)
return
None
default_para
(1,2)
default_para
(1,2,3)
- 3
- 100
- 3
- 3
- # 默认参数案例2
- # 报名函数,需要知道学生性别
- # 学习python的学生基本都是男生。所以,报名的时候如果没有特别指定,我们认为是男生
- def
reg(
name
,age
,gender
="male"):
if
gender
=="male":
print("{0} is {1}, and he is a good student".format(
name
,age
))
else:
print("{0} is {1}, and she is a good student".format(
name
,age
))
- # 调用默认参数函数案例
reg
("mingyue",21)
reg
("xiaojing",23,"female")
mingyue is
21,and he is a good student
xiaojing is
23,and she is a good student
- # 关键字参数案例1
- def
keys_para(
one
,two
,three
):
print(
one
+two
)
print(
three
)
return
None
keys_para
(one
=1,two
=2,three
=30)
keys_para
(three
=30,two
=2,one
=1)
- 3
- 30
- 3
- 30
- # 关键字参数案例2
- def
stu(
name
,age
,addr
):
print("I am a student")
print("我叫 {0}, 我今年 {1}岁了,我住{2}".format(
name
,age
,addr
))
n
="jingjing"
a
=18
addr
="我家"
- # 普通参数,只按照位置传递,容易出错
stu
(a
,n
,addr
)
- def
stu_key(
name
="No name",age
=0,addr
="No addr"):
print("I am a student")
print("我叫 {0}, 我今年 {1}岁了,我住{2}".format(
name
,age
,addr
))
n
="jingjing"
a
=18
addr
="我家"
- # 普通参数,只按照位置传递,容易出错
stu_key
(name
=n
,age
=a
,addr
=addr
)
- I
am a student
我叫
18,
我今年 jingjing岁了,我住我家
- I
am a student
我叫 jingjing
,
我今年
18岁了,我住我家
- # 收集参数案例
- # 函数模拟一个学生进行自我介绍,但具体内容不清楚
- # args把他看作一个List
- def
stu(
*
args
):
print("Hello 大家好,我自我介绍一下,简单说两句:")
# type函数作用是检测变量的类型
print(type(
args
))
for
item
inargs
:
print(
item
)
stu
("Liuying",18,
"北京大通州区",
"wangxiaojing",
"single")
stu
("周大神")
Hello
大家好,我自我介绍一下,简单说两句:
- <class
'tuple'>
Liuying
- 18
北京大通州区
wangxiaojing
single
Hello
大家好,我自我介绍一下,简单说两句:
- <class
'tuple'>
周大神
- # 收集参数案例
- # 说明收集参数可以不带任何参数调用,此时收集参数为空tuple
stu
()
Hello
大家好,我自我介绍一下,简单说两句:
- <class
'tuple'>
- # 如果使用关键字参数格式调用,会出现问题
stu
(name
="Liuying")
收集参数之关键字收集参数
·
def
func(**
kwargs
):
·
func_body
·
·
#
调用
;
·
func(
p1
=v1
,p2
=v2
,p3
=v3
....)
- # 收集参数案例
- # 自我介绍
- # 调用的时候需要使用关键字参数调用
- def
stu(
**
kwargs
):
# 在函数体内对于kwargs的使用不用带星号
print("Hello 大家好,我先自我介绍一下:")
print(type(
kwargs
))
# 对于字典的访问,python2 和python3有区别
for
k
,v
inkwargs
.items
():
print(
k
,"---",
v
)
stu
(name
="Liuying",age
=19,addr
="北京大通州区",
lover
="王晓静",work
="Teaccher")
- print("*"
*
50)
stu
(name
="周大神")
Hello
大家好,我先自我介绍一下:
- <class
'dict'>
name
---Liuying
age
---19
addr
---
北京大通州区
lover
---
王晓静
work
---Teaccher
- **************************************************
Hello
大家好,我先自我介绍一下:
- <class
'dict'>
name
---
周大神
- # 收集参数可以为空案例
stu
()
Hello
大家好,我先自我介绍一下:
- <class
'dict'>
收集参数混合调用的顺序问题
- # 收集参数混合调用案例
- # stu模拟一个学生的自我介绍
- def
stu(
name
,age
,*
args
,hobby
="没有",**
kwargs
):
print("Hello 大家好")
print("我叫 {0}, 我今年 {1}岁了。".format(
name
,age
))
if
hobby
=="没有":
print("我没有爱好,so sorry")
else:
print("我的爱好是{0}".format(
hobby
))
print("*"
*
20)
for
i
inargs
:
print(
i
)
print("#"
*
30)
for
k
,v
inkwargs
.items
():
print(
k
,"---",
v
)
- # 开始调用函数
name
="Liuying"
age
=19
- # 调用的不同格式
stu
(name
,age
)
stu
(name
,age
,hobby
="游泳")
stu
(name
,age
,"王晓静",
"刘石头",
hobby
="游泳",hobby2
="烹饪",hobby3
="跟不同女生聊天")
Hello
大家好
我叫 Liuying
,
我今年
19岁了。
我没有爱好,so sorry
- ********************
##############################
Hello
大家好
我叫 Liuying
,
我今年
19岁了。
我的爱好是游泳
- ********************
##############################
Hello
大家好
我叫 Liuying
,
我今年
19岁了。
我的爱好是游泳
- ********************
王晓静
刘石头
##############################
hobby2
---
烹饪
hobby3
---
跟不同女生聊天
收集参数的解包问题
- # 收集参数的解包问题
- def
stu(
*
args
):
print("哈哈哈哈")
# n 用来表示循环次数
# 主要用来调试
n
=0
for
i
inargs
:
print(type(
i
))
print(
n
)
n
+=1
print(
i
)
- # stu("Liuying", "Wangxiaojing", 19, 20)
l
=["Liuying",
19,
20,
"Wangxiaojing"]
stu
(l
)
- # 此时,args的表示形式是字典内一个List类型的元素,即 args = (["Liuying", 19, 23, "Wangxiaojing",])
- # 很显然跟我们最初的想法违背
- # 此时的调用,我们就需要解包符号,即调用的时候前面加一个星号
stu
(*l
)
哈哈哈哈
- <class
'list'>
- 0
- ['Liuying',
19,
20,
'Wangxiaojing']
哈哈哈哈
- <class
'str'>
- 0
Liuying
- <class
'int'>
- 1
- 19
- <class
'int'>
- 2
- 20
- <class
'str'>
- 3
Wangxiaojing
同理,dict类型收集参数一样可以解包,但是
函数文档
- # 文档案例
- def
stu(
name
,age
,*
args
):
'''
- 这是第一行
- 这是第二行
- 这是第三行
- '''
print("This is hanshu stu")
pass
- # 查看函数文档
- help(
stu
)
stu
.__doc__
Help on
functionstu
inmodule __main__
:
- stu(
name
,age
,*
args
)
这是第一行
这是第二行
这是第三行
- '\n 这是第一行\n 这是第二行\n 这是第三行\n '
- def
stu(
name
,age
):
'''
- 这是文档的文字内容
- :param name: 表示学生的姓名
- :param age: 表示学生的年龄
- :return: 此函数没有返回值
- '''
pass
- print(help(
stu
))
- print("*"
*
20)
- print(
stu
.__doc__
)
Help on
functionstu
inmodule __main__
:
- stu(
name
,age
)
这是文档的文字内容
:
param name
:
表示学生的姓名
:
param age
:
表示学生的年龄
:return:
此函数没有返回值
None
- ********************
这是文档的文字内容
:
param name
:
表示学生的姓名
:
param age
:
表示学生的年龄
:return:
此函数没有返回值
Pass算子python 函数的更多相关文章
- python 函数之day3
一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...
- Python函数作用域的查找顺序
函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...
- Python函数信息
Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...
- python函数基础 与文件操作
函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: def function_name(arg1,arg2[,.. ...
- Python开发【第四章】:Python函数剖析
一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...
- Python函数解析
对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...
- Python入门笔记(18):Python函数(1):基础部分
一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...
- [Python学习笔记][第五章Python函数设计与使用]
2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...
- python函数定义
刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解.其实只要把函数参数定义搞清楚了,就不难理解了. 先说说函 ...
随机推荐
- Relatives(容斥)
Relatives Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15708 Accepted: 7966 Descri ...
- 源码篇:ThreadLocal的奇思妙想(万字图文)
前言 ThreadLocal的文章在网上也有不少,但是看了一些后,理解起来总感觉有绕,而且看了ThreadLocal的源码,无论是线程隔离.类环形数组.弱引用结构等等,实在是太有意思了!我必须也要让大 ...
- 【ElasticSearch】ElasticSearch集群扫盲
Cluster 集群 ⼀个 Elasticsearch 集群由⼀个或多个节点(Node)组成,每个集群都有⼀个共同的集群名称作为标识. Node节点 ⼀个 Elasticsearch 实例即⼀个 ...
- LA3902网络
题意: 给你一棵树,所有叶子节点都是客户端,其他的都是服务器,然后问你最少在多少个服务器上安装VOD能使所有的客户端都能流畅的看视频,流畅看视频的条件是每个客户端距离他最近的安装VOD的服务 ...
- hdu 3265 线段树扫描线(拆分矩形)
题意: 给你n个矩形,每个矩形上都有一个矩形的空洞,所有的矩形都是平行于x,y轴的,最后问所有矩形的覆盖面积是多少. 思路: 是典型的矩形覆盖问题,只不过每个矩形上多了一个矩 ...
- hdu4994 博弈,按顺序拿球
题意: 给你n堆东西,两个人博弈的去拿,每次最少一个,最多是一堆,必须按顺序那,也就是只有把第一堆的东西拿完了才能去拿第二堆东西,谁先拿完谁胜,问新手是否能胜利. 思路: 显然 ...
- android调用号和libc
调用号(以arm平台为例)在/bionic/libc/kernel/uapi/asm-arm/asm/unistd.h: /* WARNING: DO NOT EDIT, AUTO-GENERATED ...
- 容器随Docker启动而启动
在容器开启状态下 docker container update --restart=always 容器名
- ThinkPHP5查询-select与find理解
出现问题 在tp5框架中判断select查询结果是否为空时,无论查询条件是否满足,判断查询结果都不为空 解析问题 select查询的是多条数据,若查询数据为空,则返回一个空的二维数组 array(ar ...
- window 下如何安装redis
1.官方没有 Windows版本的 Redis,但是微软开发并维护了针对Win64的Windows版本. Windows版本下载地址:https://github.com/MicrosoftArchi ...