支持函数默认值,日期格式化

pull/1/head
韩天峰 2 years ago
parent d789fc3ed8
commit b275b0c530
  1. 5
      cases/fstring.py
  2. 10
      cases/snippets/11.py
  3. 7
      cases/snippets/19.py
  4. 6
      cases/snippets/9.py
  5. 17
      src/Python/Translator.php

@ -0,0 +1,5 @@
from datetime import datetime;
date_val = datetime.utcnow()
print(f'{date_val=:%Y-%m-%d}') # date_val=2021-07-09

@ -0,0 +1,10 @@
from math import ceil
def chunk_into_n(lst, n):
size = ceil(len(lst) / n)
return list(
map(lambda x: lst[x * size:x * size + size],
list(range(n)))
)
chunk_into_n([1, 2, 3, 4, 5, 6, 7], 4) # [[1, 2], [3, 4], [5, 6], [7]]

@ -0,0 +1,7 @@
a = {'max': 200}
b = {'min': 100, 'max': 250}
c = {'min': 50}
print(a['min'])
print(a['min'] + b['min'] + c['min']) # throws KeyError
print(a.get('min', 0) + b.get('min', 0) + c.get('min', 0)) # 150

@ -0,0 +1,6 @@
def capitalize(s, lower_rest=False, val3=3423):
return ''.join([s[:1].upper(), (s[1:].lower() if lower_rest else s[1:])])
capitalize('fooBar') # 'FooBar'
capitalize('fooBar', True) # 'Foobar'

@ -258,7 +258,7 @@ class Translator extends \PhpAot\Core\Translator
} elseif ($op == 'Del') {
return $slice->id . '->__delitem__(' . $target . ')';
} else {
return $slice->id . '->__getitem__(' . $target . ')';
return $slice->id . '[' . $target . ']';
}
}
@ -275,7 +275,7 @@ class Translator extends \PhpAot\Core\Translator
return implode(';' . PHP_EOL, $imports);
}
function parseImport($node)
function parseImport($node): string
{
$out = '';
foreach ($node->names as $name) {
@ -359,9 +359,14 @@ class Translator extends \PhpAot\Core\Translator
function parseArguments($args): string
{
$defaults = $args->defaults ?? [];
$names = [];
foreach ($args->args as $arg) {
$names[] = '$' . $arg->arg;
foreach ($args->args as $k => $arg) {
$tmp = '$' . $arg->arg;
if ($k >= count($args->args) - count($defaults)) {
$tmp .= ' = ' . $this->parseValue($defaults[$k - count($args->args) + count($defaults)]);
}
$names[] = $tmp;
}
if ($args->vararg) {
$names[] = '...$' . $args->vararg->arg;
@ -914,6 +919,10 @@ class Translator extends \PhpAot\Core\Translator
$format = $value->format_spec->values[0]->value;
if ($format[0] == '.' and $format[-1] == 'f') {
return 'round(' . $expr . ', ' . substr($format, 1, strlen($format) - 2) . ')';
} elseif (str_contains($format, '%')) {
return $expr . '->strftime("' . $format . '")';
} else {
throw new \RuntimeException("Unsupported format: $format");
}
} else {
return $expr;

Loading…
Cancel
Save