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. 函数内所有代码缩进
 

    

    

    
print("函数结束了")
函数结束了
# 函数的调用
# 直接写出函数名字,后面小括号不能省略,括号内内容根据情况
func

我是一个函数
爱生活
# 函数定义
 

    

    

func

A
B

函数的参数和返回值

# 形参和实参的案例
# 参数person只是一个符号
# 调用的时候用另一个
 
person

    
person

    
 

    
p 
 

# 调用函数,需要把p作为实参传入
hello
p

小明,你好吗?
p 
 

hello
p

小五,你好吗?
pp 
 hello

pp

小柒,你好吗?
None
# return案例
 
 
person

    
person

    
 

    

    
p 
 

rst 
 hello
p

rst

小明,你好吗?
提前结束!
# help负责随时为你提供帮助
  

Help on built
 
 print 
 module builtins

 
print(...)
    
value
 
 sep
 end
 file
sys
stdout
 flush
False

    
    Prints the values to a stream
 or to sys
stdout by 

    Optional keyword arguments

    file
  a file
like 
 
stream
 defaults to the current sys
stdout

    sep
   string inserted between values
 
 a space

    end
   string appended after the last value
 
 a newline

    flush
 whether to forcibly flush the stream

# 九九乘法表
# version 1.0
 o 
 
 
  

    
 i 
 
 o 
 
     

        
o 
 i
 end

    

1  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
help(print)
Help on built
 
 print 
 module builtins

 
print(...)
    
value
 
 sep
 end
 file
sys
stdout
 flush
False

    
    Prints the values to a stream
 or to sys
stdout by 

    Optional keyword arguments

    file
  a file
like 
 
stream
 defaults to the current sys
stdout

    sep
   string inserted between values
 
 a space

    end
   string appended after the last value
 
 a newline

    flush
 whether to forcibly flush the stream

# 尝试用函数来打印九九乘法表
 
 

    
 o 
 
 
  

        
 i 
 
 o 
 
     

            
o 
 i
 end

        

    
    
 

 
jiujiu

jiujiu

1  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
1  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
# 改造上面函数
 
 
line_num

    '''
    line_num;代表行号
    
    打印一行九九乘法表
    '''
    
 i 
 
 line_num 
 

        
line_num 
 i
 end

        
    

 
 

    
 o 
 
 
  

        printLine
o

    
 

 
jiujiu

1 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

参数详解

o   
      def 
函数名(参数
,参数
,
)

o   
          
函数体
o   
          
o   
      # 
调用
o   
      
函数名(value1,value2,
)
o   
      
o   
      # 
调用的时候,具体值参考的是位置,按位置赋值
o   
      def 
p1
v1
p2
v2

o   
          func_block
o   
      #
调用

o   
      

o   
      
o   
      #
调用

o   
      value1

o   
      value2

o   
      
value1
value2

o   
      def 
p1
v1
 p2
v2

o   
          func_body
o   
          
o   
      
被调函数

o   
      
p1
value1
 p2
value2

·        
      def 
args

·        
          func_bady
·        
          
按照List使用方式访问args得到传入的参数
·        
          
·        
      
调用:
·        
      
p1
p2
p3

# 普通参数案例
 
 
one
 two
 three

    
one 
 two

    
 

 
normal_para

3
# 默认参数案例1
 
 
one
 two
 three

    
one 
 two

    
three

    
 

    
default_para

default_para

3
100
3
3
# 默认参数案例2
# 报名函数,需要知道学生性别
# 学习python的学生基本都是男生。所以,报名的时候如果没有特别指定,我们认为是男生
 
name
 age
 gender

    
 gender 
 

        
name
 age

    

        
name
 age

# 调用默认参数函数案例
 
reg

 
reg

mingyue is 
 and he is a good student
xiaojing is 
 and she is a good student
# 关键字参数案例1
 
 
one
 two
 three

    
one 
 two

    
three

    
 

 
keys_para
one
 two
 three

 
keys_para
three
 two
 one

3
30
3
30
# 关键字参数案例2
 
name
 age
 addr

    

    
name
 age
 addr

    
n 
 

a 
 

addr 
 

 
# 普通参数,只按照位置传递,容易出错
stu
a
 n
 addr

 
 
name
 age
 addr

    

    
name
 age
 addr

    
n 
 

a 
 

addr 
 

 
# 普通参数,只按照位置传递,容易出错
stu_key
name
n
 age
a
 addr
addr

I am a student
我叫 
 
我今年 jingjing岁了,我住我家
I am a student
我叫 jingjing
 
我今年 
岁了,我住我家
# 收集参数案例
# 函数模拟一个学生进行自我介绍,但具体内容不清楚
# args把他看作一个List
 
 
args

    

    

    
args

    
 item 
 args

        
item

stu
 
 
 
 

 
stu

Hello 
大家好,我自我介绍一下,简单说两句:
 

Liuying
18
北京大通州区
wangxiaojing
single
Hello 
大家好,我自我介绍一下,简单说两句:
 

周大神
# 收集参数案例
# 说明收集参数可以不带任何参数调用,此时收集参数为空tuple
stu

Hello 
大家好,我自我介绍一下,简单说两句:
 

# 如果使用关键字参数格式调用,会出现问题
stu
name

收集参数之关键字收集参数

·        
      def 
 
kwargs

·        
          func_body
·        
          
·        
      # 
调用

·        
      
p1
v1
 p2
v2
 p3
v3

# 收集参数案例
# 自我介绍
# 调用的时候需要使用关键字参数调用
 
 
kwargs

    

    

    
kwargs

    

    
 k
v 
 kwargs
items

        
k
 
 v

 
stu
name
 age
 addr
 
 lover
 work

 
 
 

 
stu
name

Hello 
大家好,我先自我介绍一下:
 

name 
 Liuying
age 
 

addr 
 
北京大通州区
lover 
 
王晓静
work 
 Teaccher
**************************************************
Hello 
大家好,我先自我介绍一下:
 

name 
 
周大神
# 收集参数可以为空案例
stu

Hello 
大家好,我先自我介绍一下:
 

收集参数混合调用的顺序问题

# 收集参数混合调用案例
# stu模拟一个学生的自我介绍
 
name
 age
  
args
 hobby
 
kwargs

    

    
name
 age

    
 hobby 
 

        

    

        
hobby

        
    
 
 

    
    
 i 
 args

        
i

        
    
 
 

    
    
 k
v 
 kwargs
items

        
k
 
 v

        
# 开始调用函数
name 
 

age 
 

 
# 调用的不同格式
stu
name
 age

 
stu
name
 age
 hobby

 
stu
name
 age
 
 
 hobby
 hobby2
 hobby3

Hello 
大家好
我叫 Liuying
 
我今年 
岁了。
我没有爱好,so sorry
********************
##############################
Hello 
大家好
我叫 Liuying
 
我今年 
岁了。
我的爱好是游泳
********************
##############################
Hello 
大家好
我叫 Liuying
 
我今年 
岁了。
我的爱好是游泳
********************
王晓静
刘石头
##############################
hobby2 
 
烹饪
hobby3 
 
跟不同女生聊天

收集参数的解包问题

# 收集参数的解包问题
 
 
 
args

    

    

    

    n 
 

    
 i 
 args

        
i

        
n

        n 
 

        
i

        
# stu("Liuying", "Wangxiaojing", 19, 20)
 
l 
 
 
 
 

 
stu
l

# 此时,args的表示形式是字典内一个List类型的元素,即 args = (["Liuying", 19, 23, "Wangxiaojing",])
# 很显然跟我们最初的想法违背
 
# 此时的调用,我们就需要解包符号,即调用的时候前面加一个星号
stu
l

哈哈哈哈
 

0
 
 
 

哈哈哈哈
 

0
Liuying
 

1
19
 

2
20
 

3
Wangxiaojing

同理,dict类型收集参数一样可以解包,但是

函数文档

# 文档案例
 
 
name
 age
 
args

    '''
    这是第一行
    这是第二行
    这是第三行
    '''
    

    

# 查看函数文档
stu

stu
__doc__
Help on 
 stu 
 module __main__

 
name
 age
 
args

    
这是第一行
    
这是第二行
    
这是第三行
'\n    这是第一行\n    这是第二行\n    这是第三行\n    '
 
name
 age

    '''
    这是文档的文字内容
    :param name: 表示学生的姓名
    :param age: 表示学生的年龄
    :return: 此函数没有返回值
    '''
    

 
stu

 
 
 

 
stu
__doc__

 
Help on 
 stu 
 module __main__

 
name
 age

    
这是文档的文字内容
    
param name
 
表示学生的姓名
    
param age
 
表示学生的年龄
    
 
此函数没有返回值
 
None
********************
 
    
这是文档的文字内容
    
param name
 
表示学生的姓名
    
param age
 
表示学生的年龄
    
 
此函数没有返回值

 

 

posted @   吴建明wujianming  阅读(129)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2020-04-12 色差计算度量
2020-04-12 HDR sensor 原理介绍
2020-04-12 语义分割环境搭建
点击右上角即可分享
微信分享提示