python入门——函数及python的内置函数

函数

环境介绍:python cmd控制台和pycharm

python函数的定义

def msg(name):
    print("{}在haha".format(name))
def 函数名称([参数列表]):
			# 函数体
			# return 返回值

函数的参数问题

  • 默认值参数
def get_circle_area(r,pi=3.14):
	pass
默认值参数要放在普通参数后面
  • 可变参数
def show(name,age=18,*args):
	pass
args以元组形式保存
  • 命名参数
def shows(name,age=18,**kwargs):
	pass
kwargs以字典形式保存

匿名函数

早期,python没有匿名函数,但可以借助lambda表达式来使用

def show(fn):
	fn()
show(lambda:print("haha"))#无参情况

def show(fn):
	print("haha")
show(lambda fn:print(fn))#单个参数参情况

def show(fn):
	res = fn(10,20)
	print(res)
show(lambda x,y:x + y)#多个参数情况
lambda虽然简化了代码书写,增强了代码维护成本,代码的可读性下降了,提升复杂度	

偏函数

将一个函数的某些默认值转换为想要的默认值函数

>>> int("123456",base=10)#以十进制读取,默认也为10,可修改
123456
>>> int("123456",base=8)#以八进制读取
42798
>>> int("123456789",base=8)#格式错误会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 8: '123456789'
>>> from functools import partial
>>> partial(int,base=16)			修改int的默认读取进制为16
functools.partial(<class 'int'>, base=16)
>>> bs16_int = partial(int,base=16)
>>> bs16_int("ABC")
2748

函数递归

函数自身调用自身为递归,必须要有终止条件,否则进入死循环

  • 求1-100的和
def get_sum(n):
	#没有终止条件
	return n + get_sum(n-1)

这样的代码就会报错,python中规定递归默认不能超过1000次

 [Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

设置终止条件

def get_sum(n):
	#有终止条件
	if n == 1:
		return 1
	return n + get_sum(n-1)
res = get_sum(100)
print(res)

python函数的调用

msg("wangcai")
函数名称([实参列表])

全局函数

python有接近40个全局函数,全局函数的思维导图在这里

容器
  • tuple 元组
  • dict 字典
  • list 列表
  • set 集合
数据类型
  • float 将整数和字符串转换成浮点数
  • int 将一个字符串或数字转换为整型
  • str 将对象转化为适于人阅读的形式
  • chr 用一个范围在0~255整数作参数,返回一个对应的字符
转换
  • ascii 用ascii码表将其转换为字符串,若非ascii,如UTF-8字符则有\u前缀进行转义
>>> ascii("哈哈")
"'\\u54c8\\u54c8'"
>>> a = ascii(33)
>>> type(a)
<class 'str'>
  • bin 返回一个整数 int 或者长整数 long int 的二进制表示,类型为字符串
>>> bin(8)
'0b1000'
>>> a=bin(8)
>>> type(a)
<class 'str'>
>>>
  • bool 对值进行布尔运算,None、空字符串、空列表、空元组、空集合、空字典、0等空元素和空数据结构为False,其他为True
>>> bool(None),bool(" "),bool(1),bool([]),bool("")
(False, True, True, False, False)
  • oct 将整数转换为8进制
>>> oct(22)
'0o26'
  • ord 以一个字符作为参数,返回对应的 ASCII 数值或Unicode 值,若超出范围,则报错
>>> a="a"
>>> ord(a)
97
  • hex 将整数转换为16进制
>>> hex(22)
'0x16'
>>> hex(222)
'0xde'
  • repr 将对象转化为字符串
>>> a = 1998
>>> b="haha"
>>> b+repr(a)
'haha1998'
>>> b+str(a)
'haha1998'
输入输出
  • input 标准输入,返回的是字符串
name = input("输入你的名字:")
print(name)

输入你的名字:翠花
翠花
  • print 输出流
print("哈哈")
哈哈
其它
  • abs 求数的绝对值,若数为复数,则返回模
>>> abs(-17),abs(3+4j)
(17, 5.0)
  • all 可迭代对象所有元素为True则返回True,否则返回False
>>> all([1, 3, " "]), all([1, 3, None])#空格也是一个有效字符
(True, False)
  • any 可迭代对象所有元素为False则返回False,否则返回True
>>> any([1, 3,None]), all([None, None])
(True, False)
  • bytearray 返回新的二进制数组,拥有列表大多数方法,这个是存放二进制数据,添加数据需要输入整数,参数范围为(0, 256)
a = bytearray("哈哈",encoding="utf-8")
print(a,type(a))

bytearray(b'\xe5\x93\x88\xe5\x93\x88') <class 'bytearray'>
  • bytes 返回一个新的bytes对象,范围是0-256区间的整数不可变序列
>>> bytes("翠花", encoding="utf-8")
b'\xe7\xbf\xa0\xe8\x8a\xb1'
  • callable 判断对象是否可调用
class CuiHua:
    def __call__(self):
        print("Hello,翠花")
print(callable(CuiHua))

True
  • classmethod 不需要实例化和self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,方法和实例化对象
class A():
    bar = 1

    @classmethod
    def func1(cls):
        print('func1')
        print(cls.bar)

A.func2()
  • compile 将一个字符串编译为字节代码
str = "3 * 4"
a = compile(str,'','eval')
print(eval(a))
结果:12
  • complex 返回一个复数,值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数
>>> complex("3+4j"),complex(3,4)
((3+4j), (3+4j))
  • delattr 删除对象的一个实例属性
class CuiHua:
    def __init__(self, name, age):
        self.name = name
        self.age = age

Cui = CuiHua("翠花", 18)
print(Cui.name)
# 删除对象中的属性
delattr(Cui, "name")
print(Cui.name) 
  • dir 不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表
>>> dir()
['A', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
  • divmod 返回整除整数a//b和余数a%b
>>> divmod(15,2)
(7, 1)
  • enumerate 返回一个枚举对象,start可以指定枚举计数,默认为0
>>> a = enumerate("哈哈",start=1)
>>> a,type(a)
(<enumerate object at 0x030C2E90>, <class 'enumerate'>)
  • eval 运行字符串代码,返回传入字符串的表达式的结果,不改变源码逻辑
>>> eval("1+3*(6+1)*5")
106
  • exec 运行字符串代码,改变源码逻辑
>>> sum = 0
>>> exec("sum += 1")
>>> sum
1
  • filter 依次取出可迭代对象中元素交给一个函数,取返回True的元素
a = [-1,-2,-3,-4,0,1,2,3,4]

def is_natural(number):
    """判断是否是自然数"""
    if isinstance(number, int) and number >= 0:
        return True
    else:
        return False

# 返回filter对象
result = filter(is_natural,a)
print(list(result))

[0, 1, 2, 3, 4]
  • format 格式化字符串
age = 18
print("翠花的年龄是{}".format(age))
翠花的年龄是18
  • frozenset 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素
>>> a = {1,2,3,4}
>>> b = frozenset(a)
>>> a
{1, 2, 3, 4}
>>> b
frozenset({1, 2, 3, 4})
  • globals 以字典类型返回当前位置的全部全局变量
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
  • getattr 通过字符串获取对象属性和方法值,一般联合hasattr使用
class CuiHua:

    def hello(self):
        print("Hello, 翠花")

Cui = CuiHua()
print(getattr(Cui, 'hello', None))
  • hasattr 判断对象中是否有对应字符串的属性和方法
class CuiHua:

    def hello(self):
        print("Hello, 翠花")

Cui = CuiHua()
if hasattr(Cui, "hello"):
    getattr(Cui, "hello")()
  • setattr 对应函数 getattr(),用于设置属性值,该属性可以不存在
class A():
    haha = 1

a = A()
print(getattr(a,'haha'))
setattr(a,'haha',10)
print(a.haha)
结果:	1
		10
  • hash 返回对象的hash值
>>> hash("222")
-1471210590
  • help 获取方法名和方法名下面的注释
>>> help(hash)
Help on built-in function hash in module builtins:

hash(obj, /)
    Return the hash value for the given object.

    Two objects that compare equal must also have the same hash value, but the
    reverse is not necessarily true.
  • id 以10进制获取对象内存地址
>>> a = 123
>>> id(a)
2088922112
  • isinstance 判断对象是否是某种或多个类型,判断对象是否继承某个类
def is_natural(number):
    """判断是否是自然数"""
    if isinstance(number, int) and number >= 0:
        return True
    else:
        return False
  • issubclass 判断类是否是某个类的子类,注意:左边为要判断的子类,右边为父类
class Dog:
    pass

class JingBa(Dog):
    pass

print(issubclass(Dog,JingBa))
print(issubclass(JingBa,Dog))

False
True
  • iter 生成迭代器
list = iter([1,2,3,4])
for i in list:
    print(i)
结果:
1 
2 
3 
4
  • len 获取对象长度
>>> a = [1,2,3,4]
>>> len(a)
4
  • locals 以字典类型返回当前位置的全部局部变量
>>> def A(x):
...     z=1
...     print(locals())
...
>>> A(10)
{'x': 10, 'z': 1}
  • map 将可迭代对象依次传入函数,返回可迭代对象
>>> def A(x) :
...     return x*x
...
>>> map(A,[1,2,3,4,5])
<map object at 0x006D8C50>
  • max 最大值
  • min 最小值
  • memoryview 返回给定参数的内存查看对象(内存查看对象,是指对支持缓冲区协议的数据进行包装,在不需要复制对象基础上允许代码访问)
>>>a = memoryview(bytearray("abcefg", 'utf-8'))
>>> print(a[1])
98
>>> print(a[-1])
103
  • next 返回迭代器的下一个项目
list = iter([1,2,3,4])
while True:
    x = next(list)
    print(x)
    if x == 4:
        break
结果:
1 
2 
3 
4
  • object python的默认类,python3种默认都是新式类,基类都会继承object类
def A(object):
	pass
  • open 打开一个文件并返回文件对象
f = open("e://a.txt","r")
  • pow 返回 x ^ y 或 返回 x ^ y % z的值
>>> pow(2,3)
8
>>> pow(2,3,3)
2
  • property 在新式类中返回属性值
class C(object):
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I'm the 'x' property."""
        return self._x
  • reload 重新载入之前载入的模块
import  sys
....
reload(sys)
  • range 不可变数据序列,有三个参数开始start, 停止stop,步长step
for i in range(1, 10, 2):
    print(i)
1 3 5 7 9
  • reversed 用于反向列表
>>> a= [0,1,2,3,4]
>>> a.reverse()
>>> a
[4, 3, 2, 1, 0]
  • round 四舍五入保留多少小数位
>>> round(3.141592657,2)
3.14
>>> round(3.141592657,5)
3.14159
  • slice 切片操作函数里的参数传递 slice(start,stop,step)
>>> a = slice(0,100,3)
>>> list = [0,1,2,3,4,5,6,7,8,9,10]
>>> list[a]
[0, 3, 6, 9]
  • sorted 将可迭代对象进行排序
>>> list = [10,11,22,53,64,5,6,7,8,9,10]
>>> sorted(list)
[5, 6, 7, 8, 9, 10, 10, 11, 22, 53, 64]
  • sum 序列求和
>>> sum([1,2,3,4,5])
15
  • super 调用父类方法
class Person:
	def __init__(self, name, language):
        self.name = name
        self.language = language
class Richman(Person):
    def __init__(self):
        super().__init__(name,language)
  • type 返回对象是由什么类型构建的
>>> type("haha")
<class 'str'>
>>> type([1,2,3])
<class 'list'>
  • vars 获取具有字典属性的对象
def CuiHua():
    name = "翠花"
    age = 18
    print(vars())

CuiHua()

{'name': '翠花', 'age': 18}
  • zip 依次取出可迭代对象中元素组成新的元组,返回一个迭代器
a = zip("cuihua", "翠花")
print(a.__next__())
print(a.__next__())

('c', '翠')
('u', '花')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值