简单无参函数

编写脚本test1.py

def register_user(): #函数名称只使用小写字母和下划线
"""docstring""" #描述函数的功能
print("Welcome!") register_user() #调用函数

执行脚本test1.py输出结果

Welcome!

有参函数

  • 对于有参函数,传递实参的方式有位置实参(顺序很重要!)和关键字实参(传递给函数的是名称-值对)。
  • 注:在定义函数时,必须将有默认值的形参放在所有参数最后,且默认值参数必须指向不可变对象。使用"函数名._defaults_"可查看函数默认值参数的当前值。

编写脚本test2.py

#变量name, time, gender,age和pets均为形参
#形参gender的默认值设置为female。给形参设置默认值时,等号两边不要有空格
#形参age对应的实参是可选的
def register_user(name, time, gender="female", age=""):
"""docstring""" #描述函数的功能
print("Welcome, " + name.title() + "! " + "You've been a member for " + time + " years.")
print(name.title() + " is " + gender + "\n")
if age:
print(name.title() + " is " + age + " months old.")
else:
print("The age is not sure") register_user("lele", "1","female") #使用位置实参调用函数
register_user(time="2",name="tantan",age="18") ##使用关键字实参调用函数

执行脚本test2.py输出结果

Welcome, Lele! You've been a member for 1 years.
Lele is female The age is not sure
Welcome, Tantan! You've been a member for 2 years.
Tantan is female Tantan is 18 months old.
  • 根据实参的类型,参数传递分为值传递和引用传递两种情况。当实参为不可变对象时,进行的是值传递,改变形参的值,实参的值不变;当实参为可变对象时,进行的是引用传递,改变形参的值,实参的值也一同改变。

编写脚本test3.py

def sum_obj(obj):
print("函数初始值:", obj)
obj += obj #值传递
char1 = "abc"
print("char1初始值为:", char1)
sum_obj(char1) #将不可变对象作为实参传递给形参
print("程序运行后char1的值为:", char1) #引用传递
list1 = ["abc", "def"]
print("list1初始值为:", list1)
sum_obj(list1) #将可变对象作为实参传递给形参
print("程序运行后list1的值为:", list1)

执行脚本test3.py输出结果

char1初始值为: abc
函数初始值: abc
程序运行后char1的值为: abc
list1初始值为: ['abc', 'def']
函数初始值: ['abc', 'def']
程序运行后list1的值为: ['abc', 'def', 'abc', 'def']

函数return返回值

  • 函数可返回任何类型的值。return将值返回到调用函数的代码行,使程序的大部分繁重工作移到函数中去完成,从而简化主程序。
  • 无论return语句出现在函数的哪个位置,只要被执行,就会直接结束函数的运行。

编写脚本test4.py

def register_user(name, time, gender="female", age=""):
"""docstring""" #描述函数的功能
user_info1 = "Welcome, " + name.title() + "! " + "You've been a member for " + time + " years.\n"
user_info2 = name.title() + " is " + gender + "\n"
if age:
user_info3 = name.title() + " is " + age + " months old.\n"
else:
user_info3 = "The age is not sure\n" user_info = user_info1 + user_info2 + user_info3 return user_info #一个函数只能有一个return user1 = register_user("lele", "1","female") #使用位置实参调用函数
print(user1)
user2 = register_user(time="2",name="tantan",age="18") ##使用关键字实参调用函数
print(user2)

输出结果

Welcome, Lele! You've been a member for 1 years.
Lele is female
The age is not sure Welcome, Tantan! You've been a member for 2 years.
Tantan is female
Tantan is 18 months old.
  • 函数返回字典

编写脚本test5.py

def register_user(name, time, gender="female", age=""):
"""docstring""" #描述函数的功能
user_info = {"name":name.title(), "time":time, "gender":gender}
if age:
user_info["age"]=age return user_info user1 = register_user("lele", "1","female") #使用位置实参调用函数
print(user1)
user2 = register_user(time="2",name="tantan",age="1") ##使用关键字实参调用函数
print(user2)

输出结果

{'name': 'Lele', 'time': '1', 'gender': 'female'}
{'name': 'Tantan', 'time': '2', 'gender': 'female', 'age': '1'}

传递不定长实参

  • 在形参列表中,必须将接受任意数量实参的形参放在最后。
  • python调用函数时,先匹配位置实参和关键字实参,其余实参将都传递给最后一个形参

编写脚本test6.py

def register_user(name, *info): #*parameter形式表示接收任意数量的实参并存储在一个元组中,带*的形参放在形参最后
"""docstring""" #描述函数的功能
print("\nThe user information:")
print(name)
for n in info:
print(n) register_user("lele", "1","female")
register_user("tantan","2", "male", "apple") info_list = ["1", "male", "orange"]
register_user("huahua", *info_list) #通过列表指定函数的可变参数 def user_profile(name,**info): #**两个星号创建空字典,传递来的名称-值对收集在这个字典中,可传递任意数量的实参
profile = {}
profile["name"] = name
for key, value in info.items():
profile[key] = value
return profile myinfo = user_profile("lele",age="1", gender="girl")
print(myinfo)

输出结果

The user information:
lele
1
female The user information:
tantan
2
male
apple The user information:
huahua
1
male
orange
{'name': 'lele', 'age': '1', 'gender': 'girl'}

全局变量和局部变量

  • 定义在函数内部的变量为局部变量,而在函数外的变量则为全局变量。
  • 局部变量仅能在定义的函数内部被访问,而全局变量可在整个程序中使用。
  • 当局部变量与全局变量重名时,对函数内部的变量赋值不会影响全局变量。
  • 通过关键字global修饰,可将局部变量变成全局变量

编写脚本test7.py并执行

value = 1 #全局变量
def num_sum():
a=1
a += 5 #局部变量,只能被函数num_sum访问
return a print(value) #输出结果为1
print(num_sum()) #输出结果为6
print(a) #报错

编写脚本test8.py并执行

def num_sum():
global a #将a声明为全局变量
a=1
a += 5
return a print(num_sum()) #输出结果为6
print(a)

输出结果

6
6

参数类型提示(Type Hints)

  • 具体可参考官网文档: https://docs.python.org/3/library/typing.html
  • 参数类型提示是从Python 3.5版本加入的。顾名思义,其功能在于提示需要输入的参数类型。执行程序时,参数类型提示并不会运行。
  • 参数类型提示的使用格式是在每个形参的后面跟冒号及参数类型

编写脚本test8.py

def num_sum(a: int):
a += 5 #局部变量,只能被函数num_sum访问
return a print(num_sum(1))

输出结果

6

python def函数总结(格式、参数类型、传参方式、全局变量/局部变量、参数类型提示(Type Hints))的更多相关文章

  1. mybatis多个参数时传参方式

    第一种方案 DAO层的函数方法 Lecture getLecture(Integer id, Integer parentId); 对应的mapper.xml <select id=" ...

  2. python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参

    1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...

  3. python基础:函数传参、全局变量、局部变量、内置函数、匿名函数、递归、os模块、time模块

    ---恢复内容开始--- 一.函数相关: 1.1位置参数: ef hello(name,sex,county='china'): pass #hello('hh','nv') #位置参数.默认参数 1 ...

  4. Python函数定义及传参方式

    主要内容:     1.函数初识     2.函数传参方式        (1)位置参数        (2)默认参数        (3)关键参数        (4)非固定传参 一.函数初识 1. ...

  5. C#篇(三)——函数传参之引用类型和值类型

    首先应该认清楚在C#中只有两种类型: 1.引用类型(任何称为"类"的类型) 2.值类型(结构或枚举) 先来认识一下引用类型和值类型的区别: 函数传参之引用类型: 1.先来一个简单的 ...

  6. JavaScript:箭头函数:作为参数进行传参

    之前已经说过,JS的函数,也是对象,而函数名是一个变量,是可以进行传参的,也即函数是可以被传参的. 只要是函数,都可以被传参,但是箭头函数的语法更为灵活,所以更方便进行传参. 如上图所示,fun1是一 ...

  7. python接口测试(post,get)-传参(data和json之间的区别)

    python接口测试如何正确传参: POST 传data:data是python字典格式:传参data=json.dumps(data)是字符串类型传参 #!/usr/bin/env python3 ...

  8. C/C++函数调用时传参过程与可变参数实现原理

    C/C++函数调用时传参过程与可变参数实现原理 C语言的经典swap问题 在学习C语言的时候,我们大都遇到过一些经典例题,这些经典例题背后所代表的是往往是C/C++背后的一些运行原理,比如下面这个示例 ...

  9. Java String引起的常量池、String类型传参、“==”、“equals”、“hashCode”问题 细节分析

    在学习javase的过程中,总是会遇到关于String的各种细节问题,而这些问题往往会出现在Java攻城狮面试中,今天想写一篇随笔,简单记录下我的一些想法.话不多说,直接进入正题. 1.String常 ...

  10. C# WebApi 根据实体类检查传参或字典检查参数

    根据实体类或字典检查传参,是否缺少参数并返回缺少参数 值类型必须声明可空 /// <summary> /// 根据 Dictionary<string, string> 得到实 ...

随机推荐

  1. js判断数组中对象是否存在某个值

    js判断数组中对象是否存在某个值 var arr = [{ name: "回锅肉", value: "0" }, { name: "小炒肉" ...

  2. 记一次ajax文件上传

    一个新需求提交页面. 在页面提交的时候,使用的是,先上传文件再上传表单 在这里需要返回表单存储的文件地址,需要上传.所以.在上传文件之后会返回存储的地址. 这里犯的一个错误: 往input 的type ...

  3. Delphi中var和out

    var: 传递的是参数的地址 out: 以返回值的形式返回结果,类似函数的效果:可以实现一个函数返回多个值

  4. flutter json_serializable数据模型的建立和封装

    为了方便数据使用,我们将服务器拿到的数据转换为map类型,但是在使用是大量的数据会让使用map时头大,比如每个map都key都需要手动输入,很是麻烦. 本文使用了json_serializable将m ...

  5. C++/Lua栈操作

    一.Lua栈结构 1. index为正数 c++获取lua的数组元素的实例: // 接口参数:void lua_rawgeti (lua_State *L, int index, int n); lu ...

  6. SpringCloud框架开发

    1.是什么微服务 是一种架构模式,他提倡将单一应用程序划分一组小的服务,服务之间的相互配合.互相协调. 2.Spring Cloud简介 SpringClound等于分布式微服务架构的一站式解决方案, ...

  7. 内部类(Java)

    内部类 基本介绍 概念:在一个类的内部再定义一个完整类 特点:编译之后可生成独立的字节码文件:内部类可以直接访问外部类的私有属性,不破坏封装性 分类:成员内部类:静态内部类:局部内部类:匿名内部类 p ...

  8. PLC入门笔记11

    1.开关? 输入 拨杆开关.点动开关.常开.常闭开关 霍尔接近开关(磁场 N极导通 3线+-DC24V ).电容接近开关(非金属).电感接近开关(金属) 2.输入接线? NPN型,不需要外接电源,直接 ...

  9. 弹框tabel树

    <template> <div> <el-dialog :title="title" :visible.sync="dialogVisibl ...

  10. 使用idea从零编写SpringCloud项目-zuul

    带着问题学习是最好的,什么是网关?使用网关的好处是什么?怎么使用网关 网关:是系统对外的唯一入口,是介于客户端和服务端的中间层,处理非业务功能,提供路由的请求,鉴权,监控,缓存,限流等 网关的好处:可 ...