一、函数

1.什么是函数?

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率,可扩展性强。

2.函数的分类

在python中函数分两类:内置函数,自定义函数

1)内置函数

python本身自己定义的函数,可直接调用

sum
max
min a=len('hello')
print(a) b=max([1,2,3])
print(b)

2)自定义函数

自己根据需求,按照函数定义方法去自定函数

3.函数的定义

1)为什么要定义函数?

先定义后使用,如果没有定义而直接使用,就相当于引用了一个不存在的变量名

函数的使用包含两个阶段:定义阶段和使用阶段

注:定义函数,只检测语法,不执行代码

2)函数定义的语法

def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]

例如:

def printme( str ):
print str
return

3)定义函数的三种形式

#一:无参数函数:如果函数的功能仅仅只是执行一些操作而已,就定义成无参函数,无参函数通常没有返回值
def print_star():
print('#'*6) #二:定义有参函数:函数的功能的执行依赖于外部传入的参数,有参函数通常都有返回值
# def my_max(x,y):
# res=x if x >y else y
# return res # 三元表达式
x=10
y=2
# if x > y:
# print(x)
# else:
# print(y)
#
res=x if x > y else y print(res)
#三:空函数
在一开始思考代码架构时,可以先把扩展功能写下来,后期完善 # def auth():
# """认证功能"""
# pass
# auth()
def insert():
"""插入功能"""
pass
def select():
"""查询功能"""
pass
def delete():
"""删除功能"""
pass
def update():
"""更新功能"""
pass

4)函数的调用

def foo():
print('from foo') def bar(name):
print('bar===>',name) #按照有参和无参可以将函数调用分两种
foo() #定义时无参,调用时也无需传入参数
bar('egon') #定义时有参,调用时也必须有参数 #按照函数的调用形式和出现的位置,分三种 foo() #调用函数的语句形式 def my_max(x,y):
res=x if x >y else y
return res # res=my_max(1,2)*10000000 #调用函数的表达式形式
# print(res) res=my_max(my_max(10,20),30) #把函数调用当中另外一个函数的参数
print(res)

5)函数的参数

函数的参数分两种:形参(变量名),实参(值)
#定义阶段 def foo(x,y): #x=1,y=2     print(x)     print(y)

#调用阶段 foo(1,2)
详细的区分函数的参数分为五种:
位置参数,关键字参数,默认参数,可变长参数(*args,**kwargs),命名关键字参数
  • 位置参数
def foo(x,y,z):#位置形参:必须被传值的参数
print(x,y,z) foo(1,2,3) #位置实参数:与形参一一对应

输出:

1 2 3
  • 关键字参数
def foo(x,y,z):
print(x,y,z) foo(z=3,x=1,y=2) #关键字参数需要注意的问题:
# 1:关键字实参必须在位置实参后面
# 2: 不能重复对一个形参数传值

# foo(1,z=3,y=2) #正确
# foo(x=1,2,z=3) #错误 # foo(1,x=1,y=2,z=3)
  • 默认参数
# def register(name,age,sex='male'): #形参:默认参数
# print(name,age,sex)
#
# register('asb',age=40)
# register('a1sb',39)
# register('a2sb',30)
# register('a3sb',29)
#
# register('钢蛋',20,'female')
# register('钢蛋',sex='female',age=19) #默认参数需要注意的问题:
#一:默认参数必须跟在非默认参数后
# def register(sex='male',name,age): #在定义阶段就会报错
# print(name,age,sex) #(了解)二:默认参数在定义阶段就已经赋值了,而且只在定义阶段赋值一次
# a=100000000
# def foo(x,y=a):
# print(x,y)
# a=0
# foo(1) #三:默认参数的值通常定义成不可变类型
  • 可变长参数

*args    *会把溢出的按位置定义的实参都接收,以元组的形式赋值给args

def foo(x,y,*args): #*会把溢出的按位置定义的实参都接收,以元组的形式赋值给args
print(x,y)
print(args)
#
foo(1,2,3,4,5)

例如:

# def add(*args):
# res=0
# for i in args:
# res+=i
# return res
# print(add(1,2,3,4))
# print(add(1,2))

输出:

10
3

**kwargs     **会把溢出的按关键字定义的实参都接收,以字典的形式赋值给kwargs

# def foo(x, y, **kwargs):  # **会把溢出的按关键字定义的实参都接收,以字典的形式赋值给kwargs
# print(x, y)
# print(kwargs)
# foo(1,2,a=1,name='egon',age=18)

例如:

def foo(name,age,**kwargs):
print(name,age)
if 'sex' in kwargs:
print(kwargs['sex'])
if 'height' in kwargs:
print(kwargs['height']) foo('egon',18,sex='male',height='')
foo('egon',18,sex='male')

输出:

egon 18
male
185
egon 18
male

foo(*[1,2,3])   #foo(1,2,3)

foo(**{'x':1,'b':2}     #foo(x=1,b=2)

  • 命名关键字参数
# def foo(name,age,*,sex='male',height):
# print(name,age)
# print(sex)
# print(height)
# #*后定义的参数为命名关键字参数,这类参数,必须被传值,而且必须以关键字实参的形式去传值
# foo('egon',17,height='185')

例如

def foo(x,y,z):
print('from foo',x,y,z)
def wrapper(*args,**kwargs):
print(args) #args=(1,2,3)
print(kwargs) #kwargs={'a':1,'b':2}
foo(*args,**kwargs) #foo(*(1,2,3),**{'a':1,'b':2}) #foo(1,2,3,b=2,a=1)
# wrapper(1,2,3,a=1,b=2)
wrapper(1,z=2,y=3)

输出

(1,)
{'z': 2, 'y': 3}
from foo 1 3 2

6)函数的返回值

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。

例如

def foo():
print('from foo')
return None
res=foo()
print(res)

输出

from foo
None

补充:

以三种情况返回值都为None:

没有return
return 什么都不写
return None

return 一个值 函数调用返回的结果就是这个值

def foo():
print('from foo')
x=1
return x
res=foo()
print(res)

输出:

from foo
1

return 值1,值2,值3,... 返回结果:(值1,值2,值3,...)

def foo():
print('from foo')
x=1
return 1,[2,3],(4,5),{}
res=foo()
print(res) #打印结果:(1,[2,3],(4,5),{})
a,b,c,d=foo()
print(d)

输出:

from foo
(1, [2, 3], (4, 5), {})
from foo
{}
												

【Python3的函数初识】的更多相关文章

  1. day3----编码-集合-深浅copy-文件操作-函数初识

    本文档主要内容: 一 编码 二 集合 三 深浅copy 四 文件操作 五 函数初识 首先,我们来看看两个字符串的比较 打开cmd,进入dos界面 >>>a='xingchen@' & ...

  2. 从入门到自闭之Python基础——函数初识

    1. 文件操作: 读操作: 格式:f = open("文件路径",mode = "r",encoding = "utf-8") f : 代表 ...

  3. 【python 3】 函数 初识

    函数初识 1.函数的定义.调用.返回值 函数的定义.调用.返回值 def demo(): ## 定义函数 (def + 空格 + 函数名 + () + 冒号) ## 如下为函数体 return a # ...

  4. Python3 isinstance() 函数

    Python3 isinstance() 函数 描述 isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). isinstance() 与 type() 区别: typ ...

  5. Python3 join函数和os.path.join用法

    Python3  join函数和os.path.join用法 os.path.join()连接两个文件名地址的时候,就比os.path.join("D:\","test. ...

  6. Python3 round() 函数

    Python3 round() 函数  Python3 数字 描述 round() 方法返回浮点数x的四舍五入值. 语法 以下是 round() 方法的语法: round( x [, n] ) 参数 ...

  7. Python3 reversed 函数

    Python3 reversed 函数  Python3 内置函数 描述 reversed 函数返回一个反转的迭代器. 语法 以下是 reversed 的语法: reversed(seq) 参数 se ...

  8. 《Python》 函数初识

    一.函数: 1.函数初识: def 关键字 函数名 # def my_len() 函数名的命名规则跟变量一样,要具有描述性. 函数的优点: 减少代码的重复率 增强代码的阅读性 函数的主要目的:封装一个 ...

  9. Python3 range() 函数用法

    Python3 range() 函数用法  Python3 内置函数 Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表. Pyth ...

随机推荐

  1. Activit各个网关使用简单介绍

    一.排他网关 Exclusive Gateway 排他网关又叫互斥网关,条件计算为true的顺序流会被选择继续流程,有且只有一条出口,如果出现多个条件为true,则会默认选择第一条true来执行,如果 ...

  2. Linux----CentOS-7搭建免流服务器

    本次实验采用腾讯云服务器:https://cloud.tencent.com/ 大学生身份的可以看看有没有什么活动购买 其他身份的78一个月 关于腾讯云服务器的使用可以看看腾讯云的使用手册 本博客涉及 ...

  3. 黑马day16 jquery&属性过滤选择器

    属性过滤选择器的过滤规则是通过元素的属性来获取对应的元素 .[attribute] 使用方法: $("div[id]") ;  返回值  集合元素 说明:匹配包括给定属性的元素.样 ...

  4. c++中虚多态的实现机制

    c++中虚多态的实现机制 參考博客:http://blog.csdn.net/neiloid/article/details/6934135 序言 证明vptr指针存在 无继承 单继承无覆盖 单继承有 ...

  5. 一位10年Java工作经验的架构师聊Java和工作经验

    从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师.对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式.国内开源软件推动者之一, ...

  6. 垃圾回收机制GC知识再总结兼谈如何用好GC(转)

    作者:Jeff Wong 出处:http://jeffwongishandsome.cnblogs.com/ 本文版权归作者和博客园共有,欢迎围观转载.转载时请您务必在文章明显位置给出原文链接,谢谢您 ...

  7. 网友"就像一支烟"山寨币分析估值方法

    [注:素材取自QQ群,2017年12月28日的聊天记录."就像一支烟"分享了自己的山寨币分析估值方法.因为删去了其他人的聊天记录,部分文字可能断章取义,仅供参考,具体情况请自行分析 ...

  8. HTML5 进阶系列:拖放 API 实现拖放排序(转载)

    HTML5之拖放API实现拖放排序 前言 HTML5 中提供了直接拖放的 API,极大的方便我们实现拖放效果,不需要去写一大堆的 js,只需要通过监听元素的拖放事件就能实现各种拖放功能. 想要拖放某个 ...

  9. ecshop中的$user对象

    ecshop的程序中,有个对象:$user,它是用来处理用户信息的.比如登录.注册,还有就是用来和第三方管理通讯和共享资源的.在user.php中,有一条$user->login($userna ...

  10. php面向对象4

    成员属性 基本介绍 成员属性是类的一个组成部分,一般是基本数据类型,也可以是复合类型,资源类型.比如 public $age;就是成员属性 说明 ①成员属性可以是php的任何数据类型(int, flo ...