python学习笔记(四)之函数(一)

(一)定义

1.1 函数的概念:

1.函数:把具有独立功能的代码块组织成一个小模块,在需要的时候调用。
2. 使用步骤:定义函数——封装独立的功能;调用函数——享受封装的成果。

1.2 函数的分类:

  • 内建函数,如 max()、reversed() 等
  • 库函数,如 math.ceil() 等
  • 自定义函数,使用 def 关键字定义

1.3 定义函数:

	def 函数名(参数列表):
			函数体(函数封装的代码)
			[return 返回值]
  • 函数名命名符合标识符命名规则
  • 定义函数时的参数列表又称形参列表
  • return用来返回函数执行结果。如果没有返回值,默认为None。
  • python可以间接返回多个值(返回一个元组)。
  • 一旦遇到return,函数执行结束,后面的代码不会执行。

1.4 作用域:

  • 局部变量:
    局部变量是在函数内部定义的变量,只能在函数内部使用
    函数执行结束后,函数内部的局部变量,会被系统回收
    不同的函数可以定义相同名字的局部变量,不会相互影响

  • 全局变量:
    在函数外部定义的变量,(没有定义在某一个函数内),所有函数内部都可以使用这个变量

x=9
print 'outside:',id(x)    #使用id(x)来查看变量在内存中地址,具有惟一性
def fun():
    global x # 声明a为全局变量
    x = 6
    print 'inside:',id(x)
fun()
print x
print id(x)
outside: 36670568	##输出结果
inside: 36670472
5
36670472##使用全局变量,函数的值在经过函数的计算之后记录新值,在函数内部重新赋值之后,函数执行完后不被系统内存回收。

1.5 引用对象:

在python中函数的参数传递和返回值都是靠引用传递的。
变量和数据是分开存储的,数据存储在内存中的某一位置上,变量记录的是数据在内存中的地址,即引用。
id()函数可查看变量中保存数据在内存中的地址。

(二)参数传递:

  • 实参: 调用函数时使用,小括号中的参数,是用来把数据传地到函数内部的

  • 形参: 定义函数时,小括号中的参数是用来接收参数使用的,在函数内部当作变量来使用的。形参可以任意命名。

  • 可变参数: ——通过指针传递——对象引用——原地修改

  • 不可变参数: ——通过值传递——对象引用——不会原地修改

2.1 关键字参数:

使用形参的名字来传入实参,参数的顺序无关,变量名与输入一一对应即可。(关键字参数必须在位置参数、默认参数之后) 。允许在调用时以字典形式传入0个或多个参数。在传递参数时用等号(=)连接键和值。

2.2 位置参数:

按照参数位置,依次传递参数。形参、实参个数必须保持一致。

2.3 默认参数:

形参、实参个数可以不一致,默认参数可以被改变。但定义默认参数时,必须指向不变对象

2.4 可变参数:

允许在调用参数的时候传入多个(≥0个)参数(类似于列表、字典)。
1. 可变位置参数: 形参前加 *,将收集到的多个参数组织到一个tuple中
2. 可变关键字参数: 形参前加 *,将收集到的关键字参数组织到一个dict中
3. keyword-only 参数: 又称“命名关键字参数”。在形参定义时,在一个 ==
星号或一个可变位置参数之后,出现的普通参数,已经不是普通参数,而成为keyword-only。此时可变位置参数截获了所有位置参数,其后面的keyword-only参数不能通过位置传参,只能通过关键字传参==。
4. 可变关键字参数应放在可变位置参数后,可变参数应放在普通参数后

一般顺序: 普通参数,缺省值,可变位置参数,keyword-only参数(可带缺省值),可变关键字参数

参数解构: 在给函数提供实参时,在可迭代对象前用*或**进行解构,提取出其中的所有元素作为函数的实参。

def add(*iterable):
    result = 0
    for x in iterable:
        result += x
    return result
add(1,2,3)
add(*[1,3,5])	##用*解构位置传参
add(*range(5))	##用**解构关键字传参

(三)常用函数

3.1 输入输出函数:

  1. print()函数:
print("hello","world")	##输出多个字符串,用逗号隔开,逗号输出为空格
print("hello"+"world")	##字符串相加连接,不产生空格
print(10+30)	##没有使用引号括起来,默认为数值,进行表达式计算,返回计算结果
##若数字用引号括起来,则为字符串
print("hello"+1)	##报错,不同类型的数据不能使用+号连接
print("hello",1)	##正确,不同类型的数据可以使用,号连接
print("1 2 3 ",2+3)	##字符串原样输出,算术表达式返回计算结果
##print()之后默认换行,end()函数可实现不换行
##print(布尔表达式)输出Ture,False
  1. input()函数:
name = input()	##用户输入字符串,并存放在变量中
name = input("please enter your name : ")	##带有提示信息的输入	

3.2 二进制转换函数:

  1. bin(),oct(),hex()进制转换函数(带前缀):
###返回值均为字符串,且带有前缀0b,0o,0x

###十进制转二进制
>>> bin(10)
>'0b1010'

###十进制转八进制
>>> oct(12)
>'014'

###十进制转十六进制
>>> hex(12)
>'0xc'
###hex()函数比格式化字符串函数format()慢,不推荐使用
  1. ’{0:b/0/x}’.format()进制转换函数(不带前缀):
###十进制转二进制
>>>'{0:b}'.format(10)
>'1010'

###十进制转八进制
>>>'{0:o}'.format(12)
>'14'

###十进制转十六进制
>>>'{0:x}'.format(12)
>'c'
  1. int(’ ',2/8/16)转十进制函数(不带前缀):
###二进制转十进制
>>> int('1010',2)
>'10'

###八进制转十进制
>>> int('014',8)
>'12'

###十六进制转十进制
>>> int('0xc',16)
> '12'
  1. ’{0:d}’.format()转十进制函数:
###二进制转十进制
>>> '{0:d}'.format(0b11)
> '3'

###八进制转十进制
>>> '{0:d}'.format(0o14)
> '12'

###十六进制转十进制
>>> '{0:d}'.format(0x1f)
> '31'
  1. eval()转十进制函数:

eval()函数比int()函数慢

###二进制转十进制
>>> eval(0b11)
> '3'

###八进制转十进制
>>> eval(0o14)
> '12'

###十六进制转十进制
>>> eval(0x1f)
> '31'

3.3 求数据类型函数:

  1. type()函数:
n = type(a)
  1. isinstance()函数:
    判断变量是否属于某一数据类型,可以判断子类是否属于父类
str1 = 'ss'
print(isinstance(str1,str))
>True

3.4 关键字函数:

keywords.kwlist()函数:

import keyword
print(keyword.kwlist)
输出:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

3.5 数学函数:

函数功能
abs(num)返回num绝对值
max(num1,……numn)返回最大值
pow(x,y)求x^y
round(num,n)四舍五入(n默认为0)

3.6 字符串函数:

  1. eval(str)函数:
    将字符串转成有效的表达式来求值或者计算结果。可以将字符串转化成列表list,元组tuple,字典dict,集合set。生成一个新的字符串,没有改变原本的字符串
str1 = "12-3"
print(eval(str1))
print(str1)
print(eval("[1,2,3,4]"))
print(type(eval("[1,2,3,4]")))
print(eval("(1,2,3,4)"))
print(eval('{1:1,2:2,3:3}'))
print(eval('{2,3,5,3}'))
> 9
> 12-3
> [1, 2, 3, 4]
> <class 'list'>
> (1, 2, 3, 4)
> {1: 1, 2: 2, 3: 3}
> {2, 3, 5}
  1. ord()求ASCLL码值函数:
print(ord("a"))
> 97
  1. chr()数字转ASCLL码值函数:
print(chr(97))
> a
  1. max(str),min(str)获取str最大最小字符:
  2. str.encode(编码格式):
    编码:str.encode()
    解码:str.encode().decode()
    注意:encode()的编码格式与decode()的编码格式必须保持一致
str4 = "你好吗"
print(str4.encode())
print(str4.encode().decode())
print(str4.encode("gbk"))
print(str4.encode("gbk").decode("gbk"))
> b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x90\x97'
> 你好吗
> b'\xc4\xe3\xba\xc3\xc2\xf0'
> 你好吗

3.7 栈与队列

1、栈 stack ——后进先出

mystack=[]
###压栈
mystack.append(1)
###出栈
mystack.pop()

2、 队列 queue ——先进先出

#导入数据结构的集合
import collections
queue = collections.deque([1, 2, 3, 4, 5])
print(queue)

#入队[存数据]
queue.append(8)
print(queue)
queue.append(9)
print(queue)

#取数据
print(queue.popleft())
print(queue)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值